в моих рельсах 4 приложения, у меня есть user
модели, has_one
profile
модели, которая также belongs_to
user
моделиRails 4 build_association
это мой первый раз, используя вложенный ресурс так что им любопытное потеряла к нему здесь, как это идет , пользователь создает учетную запись, после успешной аутентификации электронной почты пользователь переходит к созданию профиля. Проблема в том, что я получаю ошибку при использовании build_association. Я не уверен, является ли проблема на самом деле это, или им получить нулевые значения на Params (который я думаю, нет)
в моем routes.rb
resources :users do
resources :profiles
end
профили просмотра, new.html.erb
<%= form_for(@profile,url:{ :controller => 'profiles', :action => 'create'},html: {class: "ui large segment form error"}) do |f| %>
<%= render 'shared/form_error_messages', object: f.object%>
<div class="ui horizontal divider">Create a Profile</div>
<%= f.text_field :first_name, :placeholder => "First Name" , :required => true%>
<%= f.submit "Submit Profile", class: "ui submit button"%>
<% end %>
profiles_controller.rb
def new
@user = User.find(params[:user_id])
@profile = @user.build_profile
end
def create
@profile = @user.build_profile(profile_params)
if @profile.save
flash[:success] = "Profile has been created"
redirect_to root_url
else
render 'new'
end
end
private
def profile_params
params.require(:profile).permit(:first_name)
end
, когда им заполнив форму, им получать
NoMethodError in ProfilesController#create
undefined method `build_profile' for nil:NilClass
Application Trace | Framework Trace | Full Trace
app/controllers/profiles_controller.rb:9:in `create'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"MFCANYra..",
"profile"=>{"first_name"=>"sample",
"commit"=>"Submit Profile",
"user_id"=>"1"}
Я уже сделал это, и да, он работает, хотя он не хранит user_id, я могу сделать это вручную, поместив его в форму, но было бы очень приятно, если бы кто-то исправит неправильную часть, используя build_association, чтобы она автоматически помещает в user_id – Remson
спасибо! он сначала не работал из-за небольшого промаха, я удалял [: profile] на params, так как [: user_id] не является массивом профиля, после чего он работал. Еще раз спасибо, плохо отредактируйте это и отметьте это как check – Remson
отлично, я сработал :-) – sghosh968