我有房东和评论课。 房东有1:N评论。 当创建房东时,它会在同一个表单上创建一个注释(嵌套)。
提交表单时,会调用users_controller #create。
如果有同名,城市和州的房东已经存在,我想查看数据库,并将评论添加到该房东而不是创建新房东。
def create
#check if a landlord of the same name already exists and add comments to that
if Landlord.find_by_name(params[:name]) && Landlord.find_by_city(params[:city])&& Landlord.find_by_province(params[:province])
@landlord_exists = Landlord.find_by_name(params[:name]) && Landlord.find_by_city(params[:city])&& Landlord.find_by_province(params[:province])
@landlord_exists.comments.build
@landlord_exists.comments[0].setIP request.remote_ip
@landlord_exists.save
else
@landlord = Landlord.new(params[:landlord])
@landlord.comments[0].setIP request.remote_ip
if @landlord.save
flash[:success] = "Thank you for submitting a Landlord"
redirect_to landlords_path
else
end
end
end
将#1更新为
def create
@landlord = Landlord.where(:name => params[:name], :city => params[:city], :province => params[:province]).first_or_create!
@landlord.comments[0].setIP request.remote_ip
if @landlord.save
redirect_to landlords_path
else
end
end
该行
@landlord = Landlord.where(:name => params[:name], :city => params[:city], :province => params[:province]).first_or_create!
似乎返回一个nil对象,因此在调用setIP时抛出错误。 会导致什么?我已经在终端尝试了它,虽然我使用的是硬编码值,但它工作正常。
答案 0 :(得分:0)
最简单的方法是使用ActiveRecord :: Relation的first_or_create!
方法。这将根据表单中输入的参数执行查询,如果未找到匹配项则创建记录,这意味着您可以获得if ... else
条件:
@landlord = Landlord.where(params[:landlord]).first_or_create!
@landlord.comments.build
# etc ...