Rails:在父模型的视图中创建一个 has_one 模型?
Posted
技术标签:
【中文标题】Rails:在父模型的视图中创建一个 has_one 模型?【英文标题】:Rails: Creating a has_one model in the view of the parent model? 【发布时间】:2011-09-06 22:54:55 【问题描述】:我有两个模型,字符和背景。字符有_one 背景,背景属于_to 字符。我有一个 _menu 部分设置显示在我的角色视图中,以允许用户查看与角色相关的其他模型,例如项目和法术。
但是,Character 与这些其他模型具有 has_many 关系,我无法弄清楚如何正确链接到具有 has_one 关系的模型。
对于 has_many 模型,这是从我的 Character 视图页面添加新页面的方法:
<%= link_to 'Items Page', character_items_path(@character) unless @character.items.exists? %>
这里是菜单部分的代码,一旦页面被创建,它将链接到一个页面:
<%= link_to 'Items', character_items_path(@character) if @character.items.exists? %>
还有来自我的背景控制器的代码:
def new
@character = Character.find(params[:character_id])
@background = @character.build_background(params[:background])
end
def create
@character = Character.find(params[:character_id])
@background = @character.create_background(params[:background])
if @background.save
redirect_to character_path(@character), :notice => "Background information successfully created!"
else
render :action => "new"
end
end
有什么建议吗?基本上,我希望有一个链接_在角色显示页面中创建一个新的背景页面,然后在创建该背景后在菜单部分中显示该背景,并且当用户单击该链接时可以查看和编辑它。
我确实尝试过这样编写代码:
<%= link_to 'Background', character_background_path(@character) if @character.background.exists? %>
但是 Rails 抱怨 .exists?是一个未定义的方法。我猜 .exists 不适用于 has_one 关系,否则我一开始就错误地使用它。感谢您的任何意见!
【问题讨论】:
【参考方案1】:你应该试试if @character.background
。如果没有找到背景,则返回 nil(请参阅 http://guides.rubyonrails.org/association_basics.html#has_one-association-reference)
【讨论】:
感谢您的建议。这帮了大忙!以上是关于Rails:在父模型的视图中创建一个 has_one 模型?的主要内容,如果未能解决你的问题,请参考以下文章
Rails API 将 has_one: 图像从模型项推送到 Cloudinary 但不能
Rails validates_presence_of 并验证 has_one 关联模型中的存在
Rails Association Has_One 具有复数模型名称而不是单数且不工作