У меня есть модель Rails под названием «Биография», а в биографии есть один образ жизни.Почему это назначение атрибутов вложенных рельсов не работает
class Lifestyle < ActiveRecord::Base
belongs_to :biography
end
class Biography < ActiveRecord::Base
has_one :lifestyle, dependent: :destroy
accepts_nested_attributes_for :lifestyle
end
И В моей BiographyController Я это:
def update_biography
biography = current_user.biography
logger.debug("params are: #{params}")
logger.debug("biography_params are: #{biography_params}")
if biography.update(biography_params)
render :json => biography
else
render :json => { :errors => biography.errors.full_messages }, :status => 400
end
end
def biography_params
params.require(:biography).permit(
:disability, :hiv_positive, :blood_type,
lifestyle_attributes: [:id, :diet, :smoke, :drink])
end
И это то, что я получаю от двух моих заявлений logger.debug выше:
params are: {"lifestyle_attributes"=>{"diet"=>"2", "smoke"=>"false", "drink"=>"2"}, "disability"=>"false", "hiv_positive"=>"false", "blood_type"=>"3", "controller"=>"biographies", "action"=>"update_biography", "id"=>"4", "biography"=>{"disability"=>"false", "hiv_positive"=>"false", "blood_type"=>"3"}}
biography_params are: {"disability"=>"false", "hiv_positive"=>"false", "blood_type"=>"3"}
Почему это мои biography_params не содержат атрибуты стиля жизни, хотя я принимаю_nested_attributes_for statment в модели Biography, а также определяю связь между биографией и образом жизни в моделях? Я также добавил атрибуты lifestyle_ в списке разрешений сильных параметров.
Однако, если я запускаю это в рельсах консоли назначение делает работу:
b = Biography.first
b.update("lifestyle_attributes"=>{"diet"=>"2", "smoke"=>"false", "drink"=>"2"})
Ваши параметры должны быть 'params = {" biography "=> {" first_name "=>" new "," last_name "=>" user "," lifestyle_attributes "=> {" diet "=>" 2 "," «smoke» => «false», «drink» => «2»}} ' –
опубликовать форму для –
У меня нет формы для. Я использую обратные ссылки backbone.js и отправляю запрос json. Это заголовок: blood_type: «3» disability: «false» hiv_positive: «false» lifestyle_attributes: {diet: "2", smoke: "false", drink: "2"} – user1801879