Ruby on Rails:需要帮助更新嵌套路由中的db属性

时间:2012-11-08 16:37:55

标签: ruby-on-rails attributes routes nested

让我先说一下,我对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

有人能给我一些提示吗?

提前感谢。这东西一直让我感到沮丧。

1 个答案:

答案 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)