Я ищу решение для предварительной проверки вложенного ресурса перед отправкой всей формы в рельсах и не имею понятия о правильном дизайне.
Итак, у меня есть простая модель 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 %>
Даже если он правильно вызывает контроллер, я не получаю проверки атрибутов в контроллере.
Что мне делать?
Спасибо за вашу помощь!