【发布时间】:2017-05-16 09:06:27
【问题描述】:
我正在尝试通过成员控制器在组和员工之间添加关联。在此关联的表单中,我希望显示两个字符串属性,但要提交一个 ID。
我的会员控制器需要一个 group_id 和一个 employee_id 来执行创建操作:
def create
@employee = Employee.find(params[:employee_id])
@membership = @employee.memberships.build(group_id: params[:group_id])
if @membership.save
flash[:notice] = "Collaborateur ajouté au groupe."
redirect_to groups_url
else
flash[:error] = "Erreur lors de l'ajout du collaborateur."
redirect_to groups_url
end
end
从groups/show.html.erb 页面我有一个link_to 到membership#new 操作,它将group_id 作为参数传递并呈现新的会员表格。在该表单中,我有一个选择字段,我想在其中显示 employee.lastname 和 employee.firstname,但提交所选员工的 id 而不是显示的值。
表格
<%= form_for(@membership, :html => {class: 'form-horizontal'}) do |f| %>
<div class="box-body">
<%= f.hidden_field :group_id, value: params[:group_id] %>
<div class="form-group">
<%= f.label :employee_id, class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<%= f.select(:employee_id, Employee.all.map{|e| [e.fullname, e.id]},
{prompt: 'Selectionner'}, { class: 'form-control' } ) %>
</div>
</div>
</div>
<div class="box-footer">
<%= f.submit "Valider", class: "btn btn-primary pull-right" %>
</div>
我对该表格有 2 个问题:
首先,fullname 方法不起作用,导致表单无法显示和服务器打印:
ActionView::Template::Error (undefined method `fullname' for
#<Employee:0x007fc458e61738>)
fullname 方法在EmployeesController 中定义
def fullname
@employee = Employee.find(params[:id])
fullname = "#{@employee.firstname} #{@employee.lastname}"
end
其次,我尝试了相同的语法并将fullname 方法替换为lastname 属性,然后显示表单,但是在提交未找到记录时出现错误:
Started POST "/memberships" for ::1 at 2017-05-16 10:55:52 +0200
Processing by MembershipsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"1gJ5VQjNemlEC/8H2O1eutJtyHPArqDMrT8RXZ9rNMp2PUu/ux1SzIgbzCFsL3Jc4mOJ+aZvX7RSwVUIJoruow==", "membership"=>{"group_id"=>"1", "employee_id"=>"4"}, "commit"=>"Valider"}
Employee Load (0.4ms) SELECT "employees".* FROM "employees" WHERE "employees"."id" = ? LIMIT ? [["id", nil], ["LIMIT", 1]]
Completed 404 Not Found in 6ms (ActiveRecord: 0.4ms)
ActiveRecord::RecordNotFound (Couldn't find Employee with 'id'=)
我做错了什么?
谢谢
【问题讨论】:
标签: ruby-on-rails forms