2012-11-08 57 views
1

讓我先說一句,我對軌道和編程非常陌生。Ruby on Rails:需要幫助更新嵌套路由中的db屬性

我想做一些鏈接來開關一個布爾屬性。我已經基本上成功地通過執行以下操作做在非嵌套的資源:

路線:

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

通過使用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) 
+0

多謝,這是非常有益的。我現在已經響應了我對未嵌套資源的點擊。我仍然不確定嵌套資源的路由。 – Nathan

+0

我添加了一些東西到我的答案比希望有所幫助。 – flynfish

+0

你是一個巫師! :D 您的更新版本適用於我的嵌套資源。非常感謝! PS:如果我有15位代表,我會贊成你的回答。當我這樣做的時候,我會回來並且高舉它。 :) – Nathan