【问题标题】:Proper way to find records for a certain foreign key查找特定外键记录的正确方法
【发布时间】:2009-09-22 00:02:54
【问题描述】:

我有两个模型,分别称为 User 和 Membership。 用户 has_many :memberships 成员属于_to :user

修改 MembershipsController 的 index 方法以将 @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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      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_userApplicationController 中定义的一个方法,它返回当前登录的用户,index 操作有一个before_filter 确保用户已登录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        相关资源
        最近更新 更多