ske*_*sse 2 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
我对rails很新,我遇到问题我试图在控制器中检索一个"命题"对象.
我的数据模型是:user - > ad - > proposition
所以我创建了以下"命题"模型:
class Proposition < ActiveRecord::Base
belongs_to :ad
attr_accessible :email, :name
end
Run Code Online (Sandbox Code Playgroud)
因此,我们在"广告"和"命题"之间存在关联(许多命题可以与广告相关联).
同样,"广告"属于用户:
class Ad < ActiveRecord::Base
belongs_to :user
...
Run Code Online (Sandbox Code Playgroud)
我尝试从给定用户检索广告时没问题:
class RegistrationsController < Devise::RegistrationsController
def edit
@ads = current_user.ads
Run Code Online (Sandbox Code Playgroud)
但是当我尝试检索相关命题时:
class RegistrationsController < Devise::RegistrationsController
def edit
@ads = current_user.ads
@propositions = current_user.ads.propositions
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
undefined method `propositions' for #<ActiveRecord::Relation:0x007fee649009c0>
Run Code Online (Sandbox Code Playgroud)
有什么猜测发生了什么?
谢谢
你所拥有的错误是由你有关系的事实造成的,并且propositions
(如果你有has_many :propositions
你的Ad
班级)是在一个实例上定义的Ad
.
所以这意味着
ad = Ad.first
ad.propositions
Run Code Online (Sandbox Code Playgroud)
会工作,但current_user.ads.propositions
不会.
我假设您希望通过广告找到与用户相关联的所有提议.在这种情况下,修复非常简单.
在你的用户模型中写
class User
has_many :ads
has_many :propositions, through: :ads
end
Run Code Online (Sandbox Code Playgroud)
确保Ad
有必要的关系:
class Ad
belongs_to :user
has_many :propositions
end
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中,你可以写
@propositions = current_user.propositions
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42 次 |
最近记录: |