RoR を学習していますが、同じ形式でモデルを検証する方法が見つかりません。検証中ですが、1 つのモデル (アドレス) のエラー メッセージのみが表示され、変更が行われる前と同じように、他のモデルの他の入力フィールドが入力されます。いくつか試してみましたが、どれもうまくいきませんでした。
edit.html.erb で、エラー メッセージを表示しています。これは、1 つのモデルが正しくない場合にのみ正常に機能します。両方のモデルの入力が正しくない場合、アドレスのエラー メッセージのみが表示され、相互関係の入力フィールドは以前の値でリセットされます。
本当に必要なのはこれだけだと思います。アドレス コントローラが空です。検証を除いて、他のすべては正常に機能しています。
マティアス。
Edit.html.erb:
<h1>Edit Mutuality</h1>
<%= form_for @mutuality do |f| %>
<%= fields_for @address do |fa| %>
<% if @mutuality.errors.any? %>
<h2>Errors:</h2>
<ul>
<% @mutuality.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
<% if @address.errors.any? %>
<h2>Errors:</h2>
<ul>
<% @address.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
<table>
<tr>
<td>
<%= f.label :name %>
</td>
<td>
<%= f.text_field :name %>
</td>
</tr>
<tr>
<td>
<%= f.label :phone %>
</td>
<td>
<%= f.text_field :phone %>
</td>
</tr>
<tr>
<td>
<%= f.label :contact %>
</td>
<td>
<%= f.text_field :contact %>
</td>
</tr>
<tr>
<td>
<%= fa.label :street %>
</td>
<td>
<%= fa.text_field :street %>
</td>
</tr>
<tr>
<td>
<%= fa.label :number %>
</td>
<td>
<%= fa.text_field :number %>
</td>
</tr>
<tr>
<td>
<%= fa.label :zipcode %>
</td>
<td>
<%= fa.text_field :zipcode %>
</td>
</tr>
<tr>
<td>
<%= fa.label :city %>
</td>
<td>
<%= fa.text_field :city %>
</td>
</tr>
<tr>
<td>
</td>
<td>
<%= f.submit %>
</td>
</tr>
</table>
<% end %>
コントローラ:
class MutualitiesController < ApplicationController
def index
@mutualities = Mutuality.all
end
def show
@mutuality = Mutuality.find(params[:id])
end
def new
@mutuality = Mutuality.new
@address = Address.new
end
def create
@mutuality = Mutuality.new(params[:mutuality])
@address = Address.new(params[:address])
if @address.save
@mutuality.address_id = @address.id
if @mutuality.save
redirect_to mutualities_path, :notice => "Mutuality saved with succes!"
else
render "new"
end
else
render "new"
end
end
def edit
@mutuality = Mutuality.find(params[:id])
@address = Address.find(@mutuality.address_id)
end
def update
@mutuality = Mutuality.find(params[:id])
@address = Address.find(@mutuality.address_id)
if @address.update_attributes(params[:address])
if @mutuality.update_attributes(params[:mutuality])
redirect_to mutualities_path, :notice => "Mutuality updated with succes!"
else
render "edit"
end
else
render "edit"
end
end
def destroy
@mutuality = Mutuality.find(params[:id])
@address = Address.find(@mutuality.address_id)
@mutuality.destroy
@address.destroy
redirect_to mutualities_path
end
end