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 です。