Я пытаюсь выполнить действие редактирования для своих пользователей с помощью fields_for. Проблема в том, что он не сохраняет профессиональные параметры в User. Он не будет обновлять атрибуты pro.
У меня есть 2 модели, pro
и `user``
Пользователь has_one
pro и пользователь pro belongs_to
.
В пользовательской модели я добавил: accepts_nested_attributes_for :pro, allow_destroy: true
В контроллере пользователей я добавил:
def user_params
params.require(:user).permit(:name, :pro, :tos_agreement, :avatar,
:avatar_cache, :is_pro,:email, :password,
:password_confirmation,
pro_attributes: [
:type, :pro_name, :is_pro, :pro_image,
:is_active, :web, :user_id, :about,
:facebook, :twitter, :linkedin, :telephone])
end
def edit
@user = User.friendly.find(params[:id])
end
def update
@user = User.friendly.find(params[:id])
pro = @user.build_pro
end
И, наконец, в моем представлении edit.html.erb я добавил к форме:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<ul class="accordion-submenu">
<li class="semi_padding">
<%= f.label :nombre %>
<%= f.text_field :name, :autofocus => true %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label "Algo sobre tí" %>
<%= f.text_field :description, placeholder: "Soy una persona amante de la decoración..." %>
<%= f.label "Lugar" %>
<%= f.text_field :location , placeholder: "¿De donde eres? Ej: Bilbao"%>
</li>
</ul>
</li>
<li>
<a href="javascript:void(0)" class="js-accordion-trigger">
<i class="icon-switch"> </i> Contraseña</a>
<ul class="accordion-submenu">
<li class="semi_padding">
<%= f.label :contraseña %>
<%= f.password_field :password, :autocomplete => "off" %>
<%= f.label "Confirmación de contraseña" %>
<%= f.password_field :password_confirmation %>
</li>
</ul>
</li>
<% if @user.has_role :pro %>
<li>
<a href="javascript:void(0)" class="js-accordion-trigger">
<i class="icon-store"> </i> Datos de marca PRO</a>
<ul class="accordion-submenu">
<li class="semi_padding">
<%= fields_for @user.pro do |builder| %>
<%= builder.label :facebook %>
<%= builder.text_field :facebook, placeholder: "Facebook URL" %>
<%= builder.label :twitter %>
<%= builder.text_field :twitter, placeholder: "Twitter URL" %>
<%= builder.label :linkedin %>
<%= builder.text_field :linkedin, placeholder: "Linkedin URL"%>
<% end %>
</li>
</ul>
</li>
<% end %>
Я вижу, что параметры есть в журналах, но они не сохраняются. Любой совет? Спасибо!
ОБНОВИТЬ:
Started PUT "/users" for 127.0.0.1 at 2015-01-29 19:25:17 +0100
Processing by RegistrationsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"+6D1uzTbQioSLgcxgnMEJOw1ADTgId8LUrCCwiQXpcg=", "user"=>{"avatar_cache"=>"", "name"=>"User 5", "email"=>"[email protected]", "description"=>"Et doloremque repudiandae alias odit quis rerum.", "location"=>"Bilbao", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "pro"=>{"facebook"=>"TESTTTTTTT", "twitter"=>"TESTTTTTTT", "linkedin"=>"TESTTTTTTT"}, "commit"=>"Modificar"}
User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = 6 ORDER BY "users"."id" ASC LIMIT 1
Notification Load (0.3ms) SELECT "notifications".* FROM "notifications" WHERE "notifications"."user_id" = $1 AND "notifications"."viewed_at" IS NULL ORDER BY "notifications"."created_at" DESC LIMIT 30 [["user_id", 6]]
Notification Load (0.2ms) SELECT "notifications".* FROM "notifications" WHERE "notifications"."user_id" = $1 AND (viewed_at IS NOT NULL) ORDER BY "notifications"."created_at" DESC LIMIT 30 [["user_id", 6]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 5]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 7]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 6]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 6]]
(0.1ms) BEGIN
(0.1ms) COMMIT
Redirected to http://localhost:3000/
Completed 302 Found in 23ms (ActiveRecord: 2.2ms)
@user.update(user_params)
? - person ptd   schedule 29.01.2015params
неверны. У вас нет хэшаpro_attributes
внутри хешаuser
. Должно быть проблема с вашей формой. Наверное, потому чтоfields_for :pro
должно бытьfields_for @user.pro
. - person ptd   schedule 29.01.2015@user.pro.build
к вашему действиюedit
, иначе оно будетnil
. - person ptd   schedule 29.01.2015