在Rails中使用form_for编辑has_one对象

时间:2012-04-13 00:57:59

标签: ruby-on-rails ruby-on-rails-3.2 form-for has-one

我在两个模型之间有一个has_one / belongs_to关联 - >用户和ContactCard。虽然我能够为用户创建联系人卡片,但每当我尝试编辑卡片时,都会从ContactCardsController调用创建操作而不是更新(我可以告诉因为我在每个卡片上都有不同的成功消息)。它改变了联系卡的属性,我不得不说。我很高兴它正在工作,但宁愿修补我对铁路路径和关联的理解上的任何差距。我错过了什么?为什么不使用我期望的动作?另外,如果你知道网上或github上有任何相关的例子,我可以研究,我全都听见了。谢谢!

联络卡控制器......

class ContactCardsController < ApplicationController      


 def create 
   current_user.build_contact_card(params[:contact_card]) 
   if current_user.contact_card.save
     flash[:success] = "Contact Card created!"
     redirect_to '/account'
   else
     flash[:error] = "Fail!"
     redirect_to '/account'
  end
 end  

  def update
    if current_user.contact_card.update_attributes(params[:contact_card])
      flash[:success] = "Profile updated."
      redirect_to '/account'
    else
      flash[:error] = "Fail!"
      redirect_to '/account'
    end
  end

链接到编辑表单...

<%= link_to "Edit Profile", edit_user_contact_card_path(current_user) %>   

编辑表格......

<%= form_for [current_user, current_user.build_contact_card], :url => user_contact_card_path(current_user) do |f| %>

<%= f.label :first_name %>
<%= f.text_field :first_name %>    

<%= f.label :last_name %> 
<%= f.text_field :last_name %>

<%= f.submit "Save Contact Details", :class => "btn btn-large btn-primary" %>

<% end %>                                                           

相关路线......

resources :users do      
  resource :contact_card    
   .....

用户模型has_one:contact_card和ContactCard模型belongs_to:user

1 个答案:

答案 0 :(得分:6)

<%= form_for [current_user, current_user.build_contact_card], :url =>   user_contact_card_path(current_user) do |f| %>

每次编辑时都会建立新的联系人卡片!将其更改为

<%= form_for [current_user,contact_card], :url => user_contact_card_path(current_user) do |f| %>

您可能希望在用户控制器的创建操作中使用build_contact_card