У меня есть следующая модель User
с виртуальным атрибутом artist_attributes
:
class User < ActiveRecord::Base
attr_accessor :artist_attributes
attr_accessible :artist_attributes
belongs_to :artist
accepts_nested_attributes_for :artist, update_only: true
end
Вот модель художника:
class Artist < ActiveRecord::Base
has_one :user
end
Проблема в том, что виртуальный атрибут не устанавливается. Например, вот мой пользовательский контроллер:
class Members::UsersController < Members::BaseController
def update
current_user.artist_attributes = params[:user].delete(:artist_attributes)
p current_user.artist_attributes # => nil
# ...
end
end
И вот форма, которая отправляется:
<%= simple_form_for current_user, url: members_profile_path do |f| %>
<%= f.simple_fields_for :artist do |ff| %>
<%# ... %>
<% end %>
<%= f.submit "Edit profile", class: "btn btn-primary", disable_with: "Editing profile..." %>
<% end %>
Почему не устанавливается виртуальный атрибут artist_attributes
? Это из-за вложенной формы?
Вот хэш параметров после отправки формы:
Parameters: {
"utf8"=>"✓",
"authenticity_token"=>"XQI4y7x7CSjxUhdYvEv2bLEjitwCfXxeTBUU3+kYS4g=",
"user"=> {
"email"=>"[email protected]",
"forename"=>"You",
"surname"=>"Jiii",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"artist_attributes" => {
"bio"=>"NERVO is awesome!",
"phone_number"=>"",
"city"=>"",
"country"=>"Afghanistan"
}
},
"commit"=>"Edit profile"}
virtual attribute
в форме? Вы можете опубликовать или проверить журнал того, что отправляется вparams
? - person Rahul Tapali   schedule 02.02.2013:artist
форме, то он долженcurrent_user.artist_attributes = params[:user][:artist].delete(:artist_attributes)
- person Rahul Tapali   schedule 02.02.2013bio
,phone_number
и другие столбцы в пользовательской таблице?? - person Rahul Tapali   schedule 02.02.2013artist_attributes
был виртуальным атрибутом. Это будет хеш, который содержит биографию, номер телефона и т. д. Затем, когда я установил виртуальный атрибутartist_attributes
, я могу вручную обрабатывать то, что находится в хэше. - person Robert Audi   schedule 02.02.2013nil
? Вы не можете использоватьprint
(p) для печати в журнал. Попробуйте использоватьlogger.debug
вместоp
. Думаю, сработает - person Rahul Tapali   schedule 02.02.2013