[英]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 variable
的shorthand 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.