【问题标题】:Using default_scope in a model, to filter by the correct instanceID在模型中使用 default_scope,按正确的 instanceID 进行过滤
【发布时间】:2010-09-08 00:57:08
【问题描述】:

我有两张桌子:

书籍(id、name、desc、instance_id) 实例(id、域)

用户应该只能看到记录中分配给他们的 instance_id 的数据...

对于书籍、模型,为了实现这一点,我正在考虑使用默认范围。类似的东西:

class Books < ActiveRecord::Base
    attr_accessible :name, :description
    belongs_to :user
    default_scope :order => 'books.created_at DESC'
        AND books.instance_id == current.user.instance_id 
end

对这个想法有什么想法吗?另外,我怎样才能为 Rails 3 写第二行到最后一行? 'AND books.instance_id == current.user.instance_id'

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    访问模型内​​的当前用户不是一个好主意。我将按如下方式实现:

    class Instance < ActiveRecord::Base
      has_many :users
      has_many :books
    end
    
    class User < ActiveRecord::Base
      belongs_to :instance
      has_many :books, :order => "created_at DESC"
      has_many :instance_books, :through => :instance, :source => :books,
                       :order => "created_at DESC"
    end
    
    class Book < ActiveRecord::Base
      belongs_to  :user
      belongs_to  :instance
    end
    

    与用户实例关联的书籍列表:

    current_user.instance_books
    

    用户创建的书籍列表:

    current_user.books
    

    创建一本新书:

    current_user.books.create(:instance => current_user.instance, ..)
    

    注意:

    您的图书创建语法错误。 build 方法以 hash 作为参数。您传递的是两个参数而不是一个。

    user.books.build(params[:book].merge(:instance => current_user.instance}))
    

    或

    user.books.build(params[:book].merge(:instance_id => current_user.instance_id}))
    

    【讨论】:

    • 拍摄,但现在当我创建一本新书时,它分配的是 instance_id 而不是 user_id,我需要两者吗?为什么会这样?
    • 更新了我的答案,看看吧。
    • @KandadaBoggu 感谢您的回复...但没有设置 instance_id :) 并且 user_id 为空白。查看开发日志,INSERT 将 user_id 值显示为 NULL
    • @KandadaBoggu,刚刚注意到我错过了你的创建新书示例,我试过了,但它给出了“错误数量的参数(2 比 1)”我有:“current_user.books.build( params[:book])" 并将您的代码更新为错误:"current_user.books.build(params[:book], :instance => current_user.instance)"
    • 我在您的代码中看到语法错误。我已经用正确的代码更新了我的答案,看看吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2017-08-10
    相关资源
    最近更新 更多