具有has_one关联的嵌套模型

时间:2013-09-19 19:19:35

标签: ruby-on-rails ruby associations has-many has-one

我有几个模型......用户模型,收集模型和灵感模型......

收集模型具有灵感

has_one :inspiration, :dependent => :destroy
belongs_to :user

灵感模型属于集合

belongs_to :collection
belongs_to :user

这是我的路线

resources :collections do
  resources :inspiration
end

这是我的InspirationController(它不是复数)

def index
  @collection = Collection.find(params[:collection_id])
  @inspiration = @collection.inspiration
end

def new
  if signed_in? && current_user == @collection.user
    @user = current_user
    @collection = @user.collections.find(params[:collection_id])
    @inspiration = @collection.inspiration.new
  elsif signed_in? && current_user != @collection.user
    flash[:error] = "That's not your collection."
    redirect_to root_url
  else
    flash[:error] = "Please sign in."
    redirect_to login_url
  end
end

我对灵感的看法也是单一的(不是灵感)

在我一直使用的Rails中,我没有使用has_one关联,而且现在我想出了一些错误......

当我查看页面时,我得到两个错误之一......

一个是未定义的灵感方法,来自InspirationController中每个动作的第二行......另一个是未定义的方法COUNT,因为我在视图中有一个if语句

if @collection.inspiration.count > 0 
   foobar foobar
end 

在rails控制台中,当我尝试查找特定集合的灵感计数时,我可以看到它甚至没有执行正确的查询....

任何人都可以对这个问题有所了解,或者指出一个很好的资源来阅读这种类型的关联......提前谢谢你

有一点需要指出哪些与我通常为has_many协会做的不同... 1.我在很多地方使用了单数的“灵感”代替了复数的“灵感”,包括路线,视图和控制器。

这是编辑 在尝试创建新灵感时,我收到以下错误

undefined method `inspiration'

指向新动作

@user = current_user
@collection = @user.collections.find(params[:collection_id])
@inspiration = @collection.**inspiration**.new

在问题发生的星星之间的灵感一词

欢呼,贾斯汀

1 个答案:

答案 0 :(得分:2)

由于收藏具有灵感,@collection.inspiration会返回一个灵感对象,而不是灵感的集合(你必须称呼你的模型集,现在我是在喃喃自语:P)。而是做:

if @collection.inspiration
  foobar foobar
end

你也不能做@inspiration = @collection.inspiration.new因为灵感是零。而是做:

@inspiration = @collection.build_inspiration