2014-10-02 33 views
1

請向我解釋此link_to的url部分。瞭解link_to的url部分,包含列名和值

URL部分

admin_user_path(user,{ user: { admin: !user.admin? } }) 

充分的link_to

<%= link_to "#{ user.admin? }", admin_user_path(user, 
    { user: { admin: !user.admin? } }), 
    method: :patch, 
    class: "admin #{ user.admin ? 'btn-warning' : 'btn-info' } " 
%> 

這是HTML

<a class="admin btn-warning " data-method="patch" href="/admin/users/2? 
user%5Badmin%5D=false" rel="nofollow">true</a> 

admin_user_path產生admin/user/

admin_user_path(user)它產生admin/user/:id

admin_user_path(user, options) 我認爲,選擇部分包含值,即在通過PARAMS控制器訪問?有了這個值,我可以將它保存爲id爲id的記錄。

Sry,即時通訊仍然是新的鐵軌,我想了解選項部分。我知道,這是鐵軌的魔力,但也許有更多的解釋:)

回答

1

我檢查了Rails指南,2.9 Creating Paths and URLs From Objects「除了使用路由助手,Rails還可以創建路徑和來自參數陣列「。

例如:

<%= link_to 'Ad details', magazine_ad_path(@magazine, @ad) %> 

link_to API文檔

在你的情況

admin_user_path(user,{ user: { admin: !user.admin? } }) 

選項部分是創建一個布爾值,像你這樣在通過參數控制器說的可用。此外,在你的情況下,我會建議檢查你的控制器,用戶實際上是管理員,誰訪問該路徑(授權檢查)。

+0

謝謝你的回答。管理頁面(控制器)有一個'before_action:authorize'檢查。記錄被更改之前,是否足夠或應該檢查管理員?其實,我把它作爲一個非管理員用戶'http:// localhost:3000/admin/users/1?user%5Badmin%5D = true'發送,並沒有改變。幸運我:) – AdvanceInBeginning 2014-10-02 09:25:49

+0

@AdvanceInBeginning,聽起來你的控制器工作正常,如果非管理員用戶試圖更新值時它沒有更新;所以我認爲你已經用before_action:authorize過濾器進行了某種授權檢查。另外,我認爲你的代碼與Ruby on Rails教程中的管理檢查非常相似(我的意思是兩個控制器都使用過濾器來檢查管理員用戶)https://www.railstutorial.org/book/updating_and_deleting_users#sec-administrative_users – jyrkim 2014-10-02 09:46:08