2

2 つのモデル -> User と ContactCard の間に has_one / belongs_to 関連付けがあります。ユーザーの連絡先カードを作成することはできますが、カードを編集しようとすると、作成アクションは更新ではなく 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    
   .....

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 に答える