我有两个名为User and Membership的模型。 用户has_many:会员资格 成员资格belongs_to:user
修改MembershipsController的索引方法以将@memberships设置为用户“session [:user_id]”的所有成员资格的正确方法是什么?
我尝试过类似的东西: @memberships = Membership.find(:all,:conditions => [“user_id =?”,session [:user_id]])
但是Rails正在从用户中选择而不是成员资格:
Rendering memberships/index
←[4;35;1mUser Columns (3.0ms)←[0m ←[0mSHOW FIELDS FROM `users`←[0m
←[4;36;1mUser Load (1.0ms)←[0m ←[0;1mSELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT
←[4;35;1mCACHE (0.0ms)←[0m ←[0mSELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1←[0m
答案 0 :(得分:0)
未正确设置user_id。
脚本/控制台:
>> Membership.find(:first, :conditions => "user_id = 1")
=> nil
日志:
Completed in 19ms (View: 9, DB: 6) | 200 OK [http://localhost/memberships]
[4;36;1mSQL (0.0ms)[0m [0;1mSET NAMES 'utf8'[0m
[4;35;1mSQL (0.0ms)[0m [0mSET SQL_AUTO_IS_NULL=0[0m
[4;36;1mUser Columns (2.0ms)[0m [0;1mSHOW FIELDS FROM `users`[0m
[4;35;1mSQL (0.0ms)[0m [0mSHOW TABLES[0m
[4;36;1mUser Load (0.0ms)[0m [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 1) [0m
[4;35;1mMembership Load (1.0ms)[0m [0mSELECT * FROM `memberships` WHERE (user_id = 1) LIMIT 1[0m
[4;36;1mMembership Load (0.0ms)[0m [0;1mSELECT * FROM `memberships` WHERE (user_id = 1) LIMIT 1[0m
答案 1 :(得分:0)
session[:user_id]
代表什么?您是否尝试推出自己的身份验证系统?
有一个number of authentication solutions可以为你处理这些细节。
要回答你的问题,你可能想要使用你在两个模型之间设置的associations:
def index
@user = User.find(session[:user_id])
@memberships = @user.memberships if @user
end
使用应用程序范围的身份验证系统(无论是您自己制作的还是使用库),这很可能会简化为:
def index
@memberships = current_user.memberships
end
其中current_user
是ApplicationController
中定义的方法,它返回当前登录的用户,index
操作有before_filter
,确保用户已登录。