RubyOnRails - 使用关系创建新对象

时间:2014-05-16 02:32:12

标签: ruby-on-rails associations

我有两个型号,用户和技术员

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相关联,那么我做错了什么?

由于

1 个答案:

答案 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