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 中的模型视图时需要一些帮助

Rails Association Has_One 具有复数模型名称而不是单数且不工作

Rails 中具有相同键的两个表而不是 has_one 关系

在没有在模型中定义的情况下在 rails 中创建 slug