在我的程序中,我使用 gem' jquery-rails' ,我有两个控制器:
1。 CarsController。
2。 CarRoadsController
为了创建汽车,我在CarsController中创建方法,使用以下代码创建 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 #crera 。
根据条件,我应该怎么做才能调用两种不同的方法?
答案 0 :(得分:1)
如果您查看代码,请在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
。它使用id =&#34; todo-list&#34;更改元素内的内容。通过在部分_car.html.erb中附加代码并在该部分中传递@car变量
<强> FIX:强>
要解决您的问题,您需要更改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} %>");
答案 1 :(得分:0)
您正在通过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请求来传递数据。
如果您提供更多信息,我们可以提供更详细的帮助。