所以我在 Rails 中有一个多态控制器,我的问题是,有没有办法让我获得请求者的范围。例如,路线是/users/1/messages
,请求转到MessagesController
,在该控制器中,有没有办法获取users
路线的一部分?或者在这种情况下,它也可能admin
是其他东西。
我不能只设置一个 if 语句结构,因为在这种情况下,`POST '/users/1/messages' 是发送给用户的消息,可能来自管理员。
所以我在 Rails 中有一个多态控制器,我的问题是,有没有办法让我获得请求者的范围。例如,路线是/users/1/messages
,请求转到MessagesController
,在该控制器中,有没有办法获取users
路线的一部分?或者在这种情况下,它也可能admin
是其他东西。
我不能只设置一个 if 语句结构,因为在这种情况下,`POST '/users/1/messages' 是发送给用户的消息,可能来自管理员。
通常你应该放置一个类型字段(例如messagable_type
),一个消息实例具有相应的类(例如User
),并且 id 字段(例如messagable_id
)将指向用户的 id。所以你可以问一个消息实例:
message.messagable
=> user
它将返回用户实例。
如果您有一个网址,例如:/users/1/messages
并且您想使用它:
def load_messagable
resource, id = request.path.split('/')[1,2]
@messagable = resource.singularize.classify.constantize.find(id)
end
这是 Ryan Bates 在本集中给出的解决方案:http ://railscasts.com/episodes/154