Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何通过关系访问has_many中的属性?_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.1_Has Many Through - Fatal编程技术网

Ruby on rails 如何通过关系访问has_many中的属性?

Ruby on rails 如何通过关系访问has_many中的属性?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,has-many-through,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Has Many Through,如何在此处访问店铺名称?@deal instance可以访问完美的商品名称,但当我尝试访问店铺名称时,它会给我 no method error 'stores' 如何让store实例访问store name?这是代码。提前谢谢 控制器 def show unless session[:city_id].nil? || session[:city_id].blank? @city = City.find(session[:city_id]) @deal=@city.deals

如何在此处访问店铺名称?@deal instance可以访问完美的商品名称,但当我尝试访问店铺名称时,它会给我

no method error 'stores'
如何让store实例访问store name?这是代码。提前谢谢

控制器

def show
   unless session[:city_id].nil? || session[:city_id].blank?
   @city = City.find(session[:city_id])
   @deal=@city.deals
   @store=@deal.stores
end
查看/显示

<% @deal.each do |deal| %>
<%=deal.item_name %>
<%end%>

<%=@store.store_name %>

模型

class Store < ActiveRecord::Base
    has_many :deals ,:through =>:store_deals
    has_many :store_deals
end

class Deal < ActiveRecord::Base
    has_many :stores ,:through =>:store_deals
    has_many :store_deals
end

class StoreDeal < ActiveRecord::Base
    belongs_to :store
    belongs_to :deal
end
类存储:store\u交易
有很多:商店交易
结束
类处理:store\u交易
有很多:商店交易
结束
类StoreDeal
@交易很可能是一系列交易@city.deals意味着每个城市可以有多个交易。这会在你尝试这样做时引起问题

@deal=@city.deals
@store=@deal.stores
尝试以下方法:

@deals = @city.deals
@stores = @deals.collect(&:stores)

我只是试着给我一个…你没有想到的时候却得到了一个零的对象!您可能期望数组的一个实例。计算nil.collect时出错此处的命名可能会混淆,从{at}deal更改为{at}deals,如果您更改了控制器中的变量,请确保您已将所有调用更改为{at}deal(注释中的@符号类似于facebook,这就是为什么我有{at})。也许我应该问一下是什么。collect(&:stores)return?您正在遍历deals数组并调用每个Deal对象上的stores。结果得到@stores中的stores。现在我想,您可能也想在其上加一个.uniq,这样您就不会得到潜在的重复项。