用戶可以有多個組織。在session
散列中,它定義了當前用戶登錄哪個組織(只能是1個組織)。還有一個視圖,顯示用戶所屬組織表的概覽。在此屏幕上,用戶可以切換到另一個組織,該組織將session
散列重置爲該組織。簡體版(除去驗證):如何有效地組合一個鏈接調用兩種方法?
def set_session(organization)
session[:logged_in_for] = organization.id
end
def logged_in_organization
set_session(user.organizations.first) if session[:logged_in_for].nil?
@organization = Organization.find(session[:logged_in_for])
end
總覽畫面還需要包含其他功能爲每個組織(這些功能也可從其他畫面,如每個組織的形象,所以他們的方法已經到位)。一個示例可能是爲組織添加新用戶的功能。
但是,這些其他功能使用logged_in_organization
作爲他們執行該功能的組織(有安全原因,我爲什麼要保持這種方式)。
所以,我想的是,執行它的函數之前,如果單擊總覽畫面中的功能,它執行set_session(organization)
方法:
- 該組織
- 執行例如
add_user_path
執行set_session(organization)
這可能嗎?我雖然關於添加額外的路線和方法。然後這些將首先調用set_session(organization)
,然後再調用函數本身。但是那需要不少額外的路線和方法,也許還有更簡單的方法? (也許告訴link_to
在視圖中執行兩種方法?雖然文件的link_to似乎不利於這樣)
更新:有沒有可能到第二路由添加作爲一個PARAM概覽頁面;例如(其他功能將有其他的語法比organization_id: organization.id
所以這不是通用):
<%= link_to "Add user", move_on_path(organization, adduser_path(organization_id: organization.id)) %>
隨着作爲move_on方法:
def move_on(organization, url)
set_session(organization)
redirect_to url
end
點擊鏈接目前生產指向def move_on(organization, url)
一個錯誤:wrong number of arguments (0 for 2)
。我在這裏做錯了什麼? P.S.我有以下途徑:
get 'move_on' => 'user#move_on', as: 'move_on'
是沒可能您首先向用戶發送到'set_session'路線,然後重定向到用戶執行的動作? 您也可以將params傳遞給'link_to'函數,這樣可以將第一個param作爲'set_session'函數名稱傳遞並執行,然後第二個參數可以是您希望之後執行的函數名稱。 –
不知道該怎麼做。一個問題是'logged_in_organization'還會調用'set_session'(將其添加到OP),然後將'redirect'添加到'set_session'會使'logged_in_organization'不再正常運行。 – Nick
看看我上面的評論,我編輯了它。 –