我在两个模型之间有一个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
答案 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