让我先说一下,我对rails和编程都很陌生。
我正在尝试创建一些链接以打开和关闭布尔属性。通过执行以下操作,我基本上已成功地在非嵌套资源上执行此操作:
路线:
resources :my_resource do
get 'toggle_attribute', :on => :member
end
控制器:
def toggle_attribute
@resource = Resource.find(params[:id])
@resource.toggle!(:attribute)
end
查看:
<%= link_to "Toggle Resource", toggle_attribute_resource_path(@resource), :remote => true %>
首先,就像我上面说过的那样,这可以在我的非嵌套路线上运行,但无论我尝试添加到控制器的解决方案,我都无法获取链接以点击消息或在点击时重定向到任何内容,您单击按钮并且没有任何反应,您必须手动刷新才能看到更改。
其次,我无法弄清楚如何让这种类似的东西在嵌套的路径上工作:
路线:
resources :resource_1 do
resources :resource_2
end
有人能给我一些提示吗?
提前感谢。这东西一直让我感到沮丧。
答案 0 :(得分:1)
通过使用remote => true
,您告诉它进行ajax调用。这意味着您还需要在views文件夹中添加toggle_attribute.js.erb文件,并在该文件中使用javascript将链接元素或文本替换为您想要的内容。
还要确保通过在控制器顶部设置respond_to :html, :js
来响应js。
repond_to :html, :js
def toggle_attribute
@resource = Resource.find(params[:id])
@resource.toggle!(:attribute)
end
toggle_attribute.js.erb:
$('#toggler').html("my new html here");
在视图中:
<%= link_to "Toggle Resource", toggle_attribute_resource_path(@resource), :remote => true, :id => "toggler"%>
更新
对于您的嵌套路线,请尝试:
resources :resource_1 do
resources :resource_2 do
member do
get :toggle_attribute
end
end
end
你的道路就像:
toggle_attribute_resource_1_resource_2_path(@resource, @resource2)