我正在尝试为个人资料创建一个关联的表单,但出于某种原因,当我点击提交按钮时,我得到的NoMethodError对我来说没有意义,因为我的代码与教程完全相同我跟着......除非教程已经过时了。
def create
@user = User.find(params[:user_id])
@profile = @user.profiles.create(params[:profile])
redirect_to user_path(@user)
end
任何人都知道为什么我会收到noname错误?
属于控制器的表单如下:
https://github.com/imjp/SuperModel/blob/master/app/views/users/show.html.erb
编辑1:已修复!以下代码未显示http://localhost:3000/users/2(即个人资料#show)中的个人资料数据:<%= @user.profile.first_name %>
这是我目前的个人资料#show
def show
@user = User.find(params[:user_id])
@profile = @user.profile.find(params[:id])
end
编辑2:我在https://github.com/imjp/SuperModel更新了我的github存储库
答案 0 :(得分:1)
为什么@ user.profiles?试试@ user.profile(单数)
答案 1 :(得分:1)
您收到undefined method 'first_name' for nil:NilClass
,因为无法找到具有该ID的用户。你可能发错了什么东西。您的节目动作的网址如何?
编辑:
将users_controller.rb中的create方法更改为此
def create
@user = User.new(params[:user])
@user.build_profile
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
更改后,将 app / views / users / show.html.erb 中的表单更改为此
<h3>Add Profile</h3>
<%= form_for([@user, @user.profile]) do |f| %>
<div class="field">
<%= f.label :first_name %><br />
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :last_name %><br />
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :picture %><br />
<%= f.text_field :picture %>
</div>
<div class="field">
<%= f.radio_button(:sex, "male") %>
<%= f.label(:sex, "Male") %>
<%= f.radio_button(:sex, "female") %>
<%= f.label(:sex, "Female") %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
它会起作用。您的用户配置文件关联未构建。