我有两个型号,用户和技术员
class User < ActiveRecord::Base
has_one :technician
end
class Technician < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
创建新技术人员并尝试与现有用户关联时,会出现错误:User cannot be blank
Technician.new(表格)的观点是:
<%= form_for(@technician) do |f| %>
<% if @technician.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@technician.errors.count, "error") %> prohibited this technician from being saved:</h2>
<ul>
<% @technician.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :codigo %><br>
<%= f.number_field :codigo %><br><br>
<%= f.label :user_id %><br>
<%= f.select :user_id, options_for_select(User.all.map{|u|[u.nome, u.id]}) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
如果从select
中选择一个用户并未将其与属性user_id
相关联,那么我做错了什么?
由于
答案 0 :(得分:0)
尝试使用collect
这样的
<%= f.select :user_id, User.all.collect {|u|[u.nome, u.id]}) %>
或强>
如果您使用的是Rails 4,则可以使用pluck
<%= f.select :user_id, User.pluck(:nome, :id))
有关详情,请参阅 API
如果这不起作用,请更改Technician
模型中的验证,如下所示
class Technician < ActiveRecord::Base
belongs_to :user
validates :user_id, presence: true
end
<强>更新强>
当您使用 Rails4
时,您应该将 user_id
添加到 permitted parameters
像这样
def your_params
params.require(:technician).permit(:user_id,:codigo)
end