我正在尝试更新/保存数据库中的枚举,但似乎没有正确传递。 在更新参数传递,但“角色”(用作枚举),似乎在哈希(第3行)之外:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"5mjLbYZH6tJWOympfEApF2EwbR/Nk4cQFvqtCiXhL3hOIs+yOQGbZUaIFqO42aMyUWr3JdX+dYQU4Arkpy3jrQ==",
"company"=>{"name"=>"Agency 8", "legal_name"=>"agency No8 SIA", "reg_number"=>"123456789", "address"=>"street 8", "bank_acc"=>"123456789", "description"=>"Super agency",
"website"=>"www.google.com"}, "role"=>"seller_buyer", "commit"=>"Save", "id"=>"13"}
在 /common/companies_controller.rb 中我有:
def edit
@company = Company.find(params[:id])
end
def update
@company = Company.find(params[:id])
if @company.update_attributes(company_params)
flash[:success] = "Company updated"
redirect_to dashboard_path
else
#render 'edit'
flash[:error] = "Nothing happened!"
end
end
private
def company_params
params.require(:company).permit(:name, :legal_name, :reg_number,
:address, :bank_acc, :currency, :description, :website, :role)
end
在 /models/company.rb 中我有:
class Company < ApplicationRecord
#Companies has many users
has_many :accounts, dependent: :destroy
has_many :users, through: :accounts
has_many :user_roles, through: :users, source: :roles
enum currency: {eur: 1}, _suffix: true
enum role: {seller_buyer: 1, seller: 2, buyer: 3}, _suffix: true
accepts_nested_attributes_for :accounts, :users
在视图中,我使用此行从下拉列表中选择角色:
<option value=<%= f.select :role, Company.roles.keys.to_a, class: 'form-control' %></option>
更新
这就是视图的样子:
<div class="middle-box text-center loginscreen animated fadeInDown">
<%= form_for([:common, @company]) do |f| %>
<form class="m-t" role="form" action="">
<div class="form-group">
<%= f.text_field :name, class: 'form-control', placeholder: "Name"%>
<%= f.text_field :legal_name, class: 'form-control', placeholder: "Legal name"%>
<%= f.text_field :reg_number, class: 'form-control', placeholder: "Registration number"%>
<%= f.text_field :address, class: 'form-control', placeholder: "Address"%>
<%= f.text_field :bank_acc, class: 'form-control', placeholder: "Bank account"%>
<%= f.text_field :description, class: 'form-control', placeholder: "Description"%>
<%= f.text_field :website, class: 'form-control', placeholder: "Website"%>
<select class="form-control m-b" name="role">
<option value=<%= f.select :role, Company.roles.keys.to_a, class: 'form-control' %></option>
<%= f.submit "Save", class: "btn btn-primary block full-width m-b" %>
<% end %>
</div>
</form>
我应该更改什么才能使“角色”枚举更新/保存?
解决方案更新
这是解决方案,在编辑操作中,下拉列表显示数据库的实际值:
<%= f.select :role, Company.roles.to_a.map { |w| [w[0].humanize, w[0]] }, {}, {class:"form-control m-b"} %>
其他解决方案允许更新,但在“修改”操作中未显示当前值。
答案 0 :(得分:2)
Parameters: {"utf8"=>"✓", "authenticity_token"=>"5mjLbYZH6tJWOympfEApF2EwbR/Nk4cQFvqtCiXhL3hOIs+yOQGbZUaIFqO42aMyUWr3JdX+dYQU4Arkpy3jrQ==",
"company"=>{"name"=>"Agency 8", "legal_name"=>"agency No8 SIA", "reg_number"=>"123456789", "address"=>"street 8", "bank_acc"=>"123456789", "description"=>"Super agency",
"website"=>"www.google.com"}, "role"=>"seller_buyer", "commit"=>"Save", "id"=>"13"}
查看它"role"=>"seller_buyer"
散列的company
。它应该是这样的:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"5mjLbYZH6tJWOympfEApF2EwbR/Nk4cQFvqtCiXhL3hOIs+yOQGbZUaIFqO42aMyUWr3JdX+dYQU4Arkpy3jrQ==",
"company"=>{"name"=>"Agency 8", "legal_name"=>"agency No8 SIA", "reg_number"=>"123456789", "address"=>"street 8", "bank_acc"=>"123456789", "description"=>"Super agency",
"website"=>"www.google.com", "role"=>"seller_buyer"}, "commit"=>"Save", "id"=>"13"}
它正在发生,因为您的表单输入未正确生成。你不应该使用select inside选项。 select
将按给定数组(Company.roles.keys.to_a
)生成选项。
修改强> 这应该可以解决您的设计问题:
<%= f.select :role, options_for_select(Company.roles.keys.to_a, class: 'form-control'),{},{class:"form-control m-b"} %>
答案 1 :(得分:1)
这看起来很奇怪。
<option value=<%= f.select :role, Company.roles.keys.to_a, class: 'form-control' %></option>
您只需编写此代码即可生成下拉列表。您必须将类添加到f.select以获得所需的样式。
<%= f.select :role, Company.roles.keys.to_a, {}, class: 'form-control m-b' %>