簡體   English   中英

根據模型實例,調用控制器方法。 軌道

[英]Call a controller method, depending on the model instance. Rails

在我的程序中,我使用gem'jquery-rails',並且有兩個控制器:

1. CarsController。

2. CarRoadsController。

為了創建汽車,我在CarsController中創建了create方法,並使用以下代碼創建了create.js.erb文件:

$("#todo-list").append("<%= j(render(@car)) %>");

我也有index.html.erb文件,其中有一個條件:

<% if @car %>
  <%= link_to(image_tag(road.image.url(:thumb)), car_roads_create_path, method: :post, remote: true) %>
<% else %>
  <%= link_to(image_tag(road.image.url(:thumb)), cars_create_path, method: :post, remote: true) %>
<% end %>

但是,當我單擊圖像時,即使在創建@car之后也始終調用Cars#create

根據條件,我應該怎么做才能調用兩種不同的方法?

如果查看代碼,則在index.html.erb中具有:

<% if @car %>
  // this statement will gets executed only when you have @car set in index action of cars controller
  <%= link_to(image_tag(road.image.url(:thumb)), car_roads_create_path, method: :post, remote: true) %>
<% else %>
  // this statement will gets executed when you don't have @car index action of cars controller
  <%= link_to(image_tag(road.image.url(:thumb)), cars_create_path, method: :post, remote: true) %>
<% end %>

而且在索引操作中,您沒有設置@car,因此它總是將您帶到汽車創建操作中。

現在,讓我們在create.js.erb中查看代碼,您有:

$("#todo-list").append("<%= j(render(@car)) %>");

這段代碼沒有在索引操作中設置@car,這只是shorthand to render a partial with instance variableshorthand to render a partial with instance variable 它通過在部分_car.html.erb內附加代碼並在該部分中傳遞@car變量來更改id =“ todo-list”元素內部的內容

固定:

要解決您的問題,您需要更改create.js.erb中的鏈接,如下所示:

#index.html.erb
<div id="create-link">
  <%= link_to(image_tag(road.image.url(:thumb)), cars_create_path, method: :post, remote: true) %>
</div>

#_create_road_car.html.erb
<%= link_to(image_tag(road.image.url(:thumb)), car_roads_create_path, id: "roads_create") %>

#create.js.erb
$("#todo-list").append("<%= j(render(@car)) %>");
$("#create-link").html("<%=j render partial: "create_road_car", locals: {road: @your_road_variable}  %>");

更新:

根據我們的聊天,您可以這樣操作:

#index.html.erb
<div id="create-link">
  <%= link_to(image_tag(road.image.url(:thumb)), cars_create_path(road: road), method: :post, remote: true) %>
</div>

#car_roads_controller.rb
def create
  #other code
  @road = params[:road]
end

#create.js.erb
$("#todo-list").append("<%= j(render(@car)) %>");
$("#create-link").html("<%=j render partial: "create_road_car", locals: {road: @road}  %>");

您正在通過link_to進行發布...根據您的路線設置方式,您可能無法訪問要嘗試到達的路線。

您能否在config / routes.rb中向我們顯示您為這些鏈接設置的路由?

您是否正在使用link_to提交表單? 如果是這樣,您應該使用jquery通過為表單和鏈接分配ID來做到這一點,如下所示:

<% if @car %>
  <%= link_to(image_tag(road.image.url(:thumb)), car_roads_create_path, id: "roads_create") %>
<% else %>
  <%= link_to(image_tag(road.image.url(:thumb)), cars_create_path, id: "car_create") %>
<% end %>

<script type='text/javascript'>
  $("#roads_create").click(function(){
    $("#road_create_form").submit();
  });
  $("#car_create").click(function(){
    $("#car_create_form").submit();
  });
</script>

另一方面,如果您沒有要提交的任何表單,則應在LINK_to中使用帶有參數的GET請求來傳遞數據。

如果您提供更多信息,我們可以提供更詳細的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM