我正在研究一個應用程序,其中用戶可以列出他們的遊戲內物品以與其他用戶交易。用戶的個人資料網址將是這樣的:Ruby on Rails:有問題根據上下文選擇正確的參數方法使用的方法
/用戶/ 1 /指數
而且他們的用戶列表配置文件會像
/用戶/ 1 /人數/ 1
所有嵌套在用戶下的其他資源將與後者相同。
我試圖實現一個由before_filter回調調用的方法,該方法檢查用戶是否阻止或被擁有該配置文件的用戶阻止或者被相應的嵌套資源阻止,例如發送消息的能力,查看他們列表等。如果其中任何一個互相阻塞,那麼他們重定向到應用程序的根頁面。這是我使用的的before_filter方法:
def blocked_relationships
if blocked?
redirect_to :root
end
end
我用的是檢查兩個用戶之間的關係的狀態的另一種方法。 這是我發現後Rails的食譜書的一些研究禮貌製作的方法:
def blocked?
Relationship.exists?(user_id: current_user.id, other_user_id: params[:user_id], status: "blocked") ||
Relationship.exists?(user_id: params[:user_id], other_user_id: current_user.id, status: "blocked")
end
我的問題是,這種方法僅適用,例如,當用戶1是看用戶2的項目,消息列表等因爲URL:
/用戶/ 2 /目錄[或項目或等]
將包含一個PARAMS使得參考給用戶作爲PARAMS [:USER_ID]。在這種情況下,params [:id]和上下文將引用列表id。
但是,如果我是用戶1,並且我阻止了用戶2並訪問用戶2的配置文件,則此方法將不起作用,因爲url/users/2/index將使用params [:id]來代替params [:用戶名]。
我一直在思考如何實現這在乾燥的方式,但我似乎無法來解決不是做這樣的事情等我的問題:
def blocked?
if params[:user_id].blank?
Relationship.exists?(user_id: current_user.id, other_user_id: params[:id], status: "blocked") ||
Relationship.exists?(user_id: params[:id], other_user_id: current_user.id, status: "blocked")
else
Relationship.exists?(user_id: current_user.id, other_user_id: params[:user_id], status: "blocked") ||
Relationship.exists?(user_id: params[:user_id], other_user_id: current_user.id, status: "blocked")
end
end
我也認爲我」的可能性米甚至沒有正確實施我的阻止功能,但在我解決這個問題之前,我想知道是否有人對如何解決這個問題有任何想法。任何幫助或反饋將不勝感激,我很樂意爲澄清添加任何信息。謝謝!