我正在尝试编写数据库查询,而且我一直在摸不着自己的错误。
这是相关模型
class User
has_one :store
has_many :products, through: :store
enum gender: %i[menswear womenswear unisex]
def menswear
self.gender == 'menswear'
end
def womenswear
self.gender == 'womenswear'
end
end
class Product
belongs_to :store
end
和控制器是
class UsersController
def index
@male = User.menswear
@female = User.womenswear
@products = Product.all.order('created_at DESC')
end
end
查看
<% @male.products.in_groups_of(3, false).each do |group| %>
<% for product in group %>
<%= link_to product_path(product) do %>
<%= image_tag product.secimage_url(:index).to_s, class: "image hide" %>
<%= image_tag product.image_url(:index).to_s, class: "image" %>
<% end %>
<% end %>
<% end %>
女装也一样。
但我得到了NoMethodError
undefined method 'products' for #<User::ActiveRecord_Relation:0x007fbd25e42ac0>
编辑:我最初可能不清楚,我希望视图显示按男装和女装分类的产品,请帮忙!感谢
关于我做错的任何指示都将不胜感激。 提前谢谢!
移植
我之后向用户添加了性别,而不是原始迁移
def up
add_column :users, :gender, :integer
add_index :users, :gender
end
def down
remove_column :users, :gender
end
更新:我将用户控制器更改为此
def index
@partners = User.partner
@male = User.find_by(gender: 0)
@female = User.find_by(gender: 1)
end
它可以工作,但只返回男性和女性的第一个实例。我需要它来返回它的全部!
答案 0 :(得分:0)
您正在将has_one :through
关联与has_many :through
关联混合在一起。您可以查看正确的文档here。您正在has_one :store
并尝试建立关联has_many :products, through: :store
,这是不可能的。
要么像以下那样使用has_one:
has_one :store
has_one :product, through: :store
或者对于你的情况,使它成为has_many:通过喜欢:
has_many :stores
has_many :product, through: :stores
或者您可以从has_many :products, through: :store
中删除并将其设为has_many :products
选择解决方案符合您的要求。
答案 1 :(得分:0)
尝试更换:
def index
@partners = User.partner
@male = User.find_by(gender: 0)
@female = User.find_by(gender: 1)
end
与
def index
@partners = User.partner
@male = User.where(gender: 0)
@female = User.where(gender: 1)
end