【问题标题】:Ruby on Rails: Need help updating db attribute in a nested routeRuby on Rails:需要帮助更新嵌套路由中的 db 属性
【发布时间】:2012-10-28 21:51:04
【问题描述】:

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

谁能给我一些建议?

提前非常感谢。这东西一直让我发疯。

【问题讨论】:

    标签: ruby-on-rails attributes routes nested


    【解决方案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)
    

    【讨论】:

    • 非常感谢,这很有帮助。我现在已经让它响应我对我的非嵌套资源的点击。不过,我仍然不确定嵌套资源的路由。
    • 我在回答中添加了一些内容,希望能有所帮助。
    • 你是个巫师! :D 您的更新版本非常适合我的嵌套资源。太感谢了! PS。如果我有 15 个代表,我会支持你的回答。当我这样做时,我会回来投票。 :)
    猜你喜欢
    • 2014-02-05
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多