2

我在两个模型之间有一个 has_one / belongs_to 关联-> 用户和 ContactCard。虽然我可以为用户创建联系人卡片,但每当我尝试编辑卡片时,都会从 ContactCardsController 调用创建操作,而不是更新(我可以判断,因为每个卡片都有不同的成功消息)。我不得不说,它改变了联系人卡片的属性。我很高兴它的工作,但宁愿修补我对 Rails 路径和关联的理解中的任何差距。我错过了什么?为什么不使用我期望的动作?此外,如果您知道我可以研究的网络或 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    
   .....

User 模型 has_one :contact_card 和 ContactCard 模型 belongs_to:user

4

1 回答 1

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

于 2012-04-17T17:22:29.227 回答