1

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

谁能给我一些提示?

提前致谢。这东西一直让我发疯。

4

1 回答 1

1

通过使用remote => true,您是在告诉它进行 ajax 调用。这意味着您还需要在您的视图文件夹中添加一个 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)
于 2012-11-08T16:54:10.757 回答