ruby on rails-使用has_many的集合,:通过关系



我希望当前用户阅读并购买他所在俱乐部的帖子。我很想做下面这样的事情,但我读过或尝试过的东西都没有点击。我将使用许多这种类型的嵌套集合,我被卡住了

型号

    class User < ActiveRecord::Base
        has_many :memberships
        has_many :clubs, :through => :memberships
        has_many :products
    class Membership < ActiveRecord::Base
        belongs_to :user
        belongs_to :club
    class Club < ActiveRecord::Base
        has_many :memberships
        has_many :users, :through => :memberships
        has_many :events
   class Event < ActiveRecord::Base
        belongs_to :club
   class Product < ActiveRecord::Base
        belongs_to :user
        has_many :posts
   class Post < ActiveRecord::Base
        belongs_to :product
        belongs_to :event

张贴控制器

def index
   @user = current_user
   @posts_in_my_clubs = @user.memberships.collect { |a| a.products.posts}

posts/index.html.erb

@posts_in_my_clubs do |post|

给我一个错误:

的未定义方法"membership"nil:NilClass

对此我并不感到惊讶。此外,我希望能够只选择将只在某个事件中发布的帖子,等等。

模式总结:俱乐部有很多活动&用户。用户有许多产品,他们可以在不同的活动日期发布数量以进行销售。只有俱乐部会员才能在俱乐部发帖或查看帖子。

我没有在模型中重复数据,而是建立了关联,这似乎使在ActiveRecord中创建集合时无法访问数据。我在我的研究中发现了关联加入模型,以及带有metawhere的智能关联映射。这些链接让我感觉自己快要接近了。

编辑

我已经登录,只要不尝试进行这样的收集,就可以访问我需要的所有数据。例如,我可以通过检查我是否是俱乐部的成员

def member?(club) 
   return !!self.clubs.find(club)

我是一个笨蛋,所以我一定错过了一些显而易见的东西。我需要把我的收藏分成几步吗?即收集用户俱乐部、收集用户俱乐部产品、收集用户协会产品帖子。。。感谢

记录器信息

    @user = current_user
    logger.info @user 
    logger.info 'super secret message'
   # @club_posts = @user.memberships.collect {|a| a.product.posts}

返回

#<User:0x5b202a0>
super secret message

当我删除注释时,我再次得到零错误,现在是"product"(进度!)。我肯定以为我以前登录过。。虽然很晚

该错误消息表示current_usernil。你确定你的身份验证系统正常工作吗?

这是我找到的解决方案,使用的是Rails 3.1 中的标准gem-nested_has_many_through

用户模型

  has_many :products, :dependent => :destroy
  has_many :orders, :dependent => :destroy
  has_many :product_posts, :through => :products, :source => :posts, :uniq => true
  has_many :food_orders, :through => :product_posts, :source => :orders, :uniq => true

订单控制器

 @orders_for_my_products = current_user.food_orders.all

订单索引

<%= render :partial => "order", :collection => @for_my_products, :locals => {:order => @order}  %>

这通过使用最小代码的关系返回深度嵌套数据。我当然希望它有效率,但至少我的理智没有受到影响!

相关内容

  • 没有找到相关文章

最新更新