Rails:在父模型的视图中创建has_one模型?

时间:2011-09-06 22:54:56

标签: ruby-on-rails view partial has-one

我有两个模型,角色和背景。字符has_one背景和背景belongs_to字符。我有一个_menu部分设置显示在我的角色视图中,允许用户查看与角色相关的其他模型,例如项目和法术。

但是,Character与其他模型有着很多关系,我无法弄清楚如何正确链接到具有has_one关系的模型。

以下是从我的角色视图页面添加新页面的方法,用于has_many模型:

<%= link_to 'Items Page', character_items_path(@character) unless @character.items.exists? %>

这是菜单partial的代码,一旦页面被创建就会链接到页面:

<%= link_to 'Items', character_items_path(@character) if @character.items.exists? %>

来自我的Backgrounds控制器的代码:

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在角色显示页面中创建一个新的背景页面,然后在菜单部分创建后显示该背景,并在用户点击链接时能够查看和编辑。

我确实尝试过编写代码:

<%= link_to 'Background', character_background_path(@character) if @character.background.exists? %>

然后Rails抱怨说。存在?是一种未定义的方法。我猜测.exists不适用于has_one关系,否则我首先会错误地使用它。感谢您的任何意见!

1 个答案:

答案 0 :(得分:2)

你应该试试if @character.background。如果未找到背景,则返回nil(请参阅http://guides.rubyonrails.org/association_basics.html#has_one-association-reference