Railsでフォーム全体を送信する前に、ネストされたリソースの事前検証を行うソリューションを探していますが、正しい設計についての手がかりがありません。
したがって、ネストされた属性に受け入れられる単純なUser
モデルがあります。has_one :place
class User < ActiveRecord::Base
...
has_one :place, :dependent => :destroy
accepts_nested_attributes_for :place
attr_accessible :place_attributes
...
end
Place
モデルには、 などの属性が含まれています:street_number, :street, :postal_code, :city, :country
。
ユーザーが場所を紹介できるように、ユーザーの編集用のフォームをセットアップしたいと思います。送信する前に、場所を検証する機会をユーザーに与えたいと思います。そこで、カスタム アクションを設定しましたPlaceController
。
# place_controller.rb
class PlaceController < ApplicationController
...
def validate
# code for validation
end
end
ちなみに、その場所のルートは次のように定義しました。
# route.rb
resources :users do
resource :place do
match 'validate', :to => 'place#validate'
end
end
次に、ビューでフォームを設定しました:
<%= form_for(:user, :url => edit_user_path(@user), :html => {:method => :put, :multipart => true}) do |f| %>
<%= f.text_field :name %>
# other fields for users
...
<%= f.fields_for :place do |builder| %>
<%= render 'places/form', :f => builder %>
<% end %>
<%= f.submit "Update" %>
そしてパーシャルplaces/form
は、ネストされた属性のフィールドを管理しますplace
:
<%= f.text_field :street_number %>
<%= f.text_field :street %>
...
ポイントは次のとおりですvalidate
。場所モデルの属性を使用してアクションを呼び出すための送信またはリンクが必要です。私は次のようなものを試しました:
<%= link_to 'Validate', validate_user_place_path(@user, :format => :js, :params_to_validate => f.object), :remote => true %>
コントローラーを正しく呼び出しても、コントローラーで属性を検証することはできません。
何をすればよいでしょうか?
ご協力いただきありがとうございます!