Ruby on rails 如何从link_到创建没有直接关联的资源?
我有三个模特,分别是妈妈、孩子和最爱Ruby on rails 如何从link_到创建没有直接关联的资源?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有三个模特,分别是妈妈、孩子和最爱 class Mom < ActiveRecord::Base has_many :kids has_many :favorites class Kid < ActiveRecord::Base belongs_to :mom belongs_to :user class Favorite < ActiveRecord::Base belongs_to :mom belongs_to :user 现在我遇到的问题
class Mom < ActiveRecord::Base
has_many :kids
has_many :favorites
class Kid < ActiveRecord::Base
belongs_to :mom
belongs_to :user
class Favorite < ActiveRecord::Base
belongs_to :mom
belongs_to :user
现在我遇到的问题是,当我尝试在我的收藏夹控制器中使用以下代码创建它时:
class FavoritesController < ApplicationController
def create
@mom = Mom.find(params[:id])
@favorites = current_user.favorites.build(params[:favorites])
@favorites.mom_id = @kid.mom.id
if @favorites.save
redirect_to :back, notice: "#{@favorite.mom.name.titleize} is one of your favorites now."
else
redirect_to :back
end
end
从这句话中我相信:@favorites.mom\u id=@kid.mom.id
这是为什么呢?您可能需要为
看看吧多亏了巴鲁、帕万和吉吉先生,我才能够让它工作。只需对我的
create
操作进行一些小更改,即可使一切正常工作:
def create
@mom = Mom.find(params[:id])
@favorite = current_user.favorites.build(params[:favorites])
@favorite.mom_id = @mom.id
if @favorite.save
redirect_to :back, notice: "#{@favorite.mom.name.titleize} is one of your favorites now."
else
redirect_to :back
end
end
方法 您尚未在
create
类中设置@kid
变量
--
当您收到no method
错误时,您通常会发现这就是问题所在:
nil:NilClass的未定义方法“mom”
这里的错误不是mom
方法,而是nil:NilClass
-您没有设置@kid
我会这样做:
def create
@mom = Mom.find(params[:id])
@favorites = current_user.favorites.build(favorites_params)
if @favorites.save
redirect_to :back, notice: "#{@favorite.mom.name.titleize} is one of your favorites now."
else
redirect_to :back
end
end
private
def favorites_params
params.require(:favorites).permit(:your, :attributes).merge(mom_id: @mom_id)
end
您的创建没有
@kid
。你的意思是把@mom.id
放在你的创建方法中没有初始化@kid
。也许你的意思是像@baloo所说的@mom.id
。你还需要在这行@favorite
中将@favorites
改为@favorites
重定向到:back,注意:“{@favorite.mom.name.titleize}”是您现在的收藏夹之一。“
以避免将来出现另一个错误。按照您的逻辑,@mom
使用参数[:id]
,以及@favorites
的mom\u id
(应为单数)正在使用@kid.mom.id
==>更新,为什么不直接使用@favorites.mom\u id=@mom.id
?
def create
@mom = Mom.find(params[:id])
@favorite = current_user.favorites.build(params[:favorites])
@favorite.mom_id = @mom.id
if @favorite.save
redirect_to :back, notice: "#{@favorite.mom.name.titleize} is one of your favorites now."
else
redirect_to :back
end
end
def create
@mom = Mom.find(params[:id])
@favorites = current_user.favorites.build(favorites_params)
if @favorites.save
redirect_to :back, notice: "#{@favorite.mom.name.titleize} is one of your favorites now."
else
redirect_to :back
end
end
private
def favorites_params
params.require(:favorites).permit(:your, :attributes).merge(mom_id: @mom_id)
end