Rails f.select同时保存ID和名称

时间:2017-04-15 03:40:08

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord attributes

我有一个带有f.select选项的表单。我想在从选项中选择公司名称时添加公司ID和公司名称。是否可以在f.select代码行中添加多个属性?这就是我的代码的样子:

// java
float acceleration = 120f; // deg/s²
float inertia = body.getInertia();
body.applyTorque(inertia * (float)Math.toRadians(acceleration), true);

我还希望将companyName分配给my:companyName属性,但id是唯一正在保存的内容。

感谢。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用关联。你应该有2个型号如下。

class Company < ApplicationRecord
 has_many :clients
end

class Client < ApplicationRecord
 belongs_to :company
end

您应该在视图中使用变量来使用此

呈现所有客户端列表
<%= f.select :client_id, @clients.collect { |client| [ client.name, client.id] } %>

控制器:

@clients = Client.all

在提交时,client_id将传递给控制器​​。然后,您可以找到与客户端和其他逻辑关联的公司。

client = Client.find(params[:client_id])
company = client.company
# etc ..

答案 1 :(得分:1)

在表单提交的控制器操作中,您可以在保存或更新记录之前编写。

params[:your_object][:companyName]=Client.find_by(id: params[:your_object][:client_id]).companyName

请记住向您的强力参数添加params[:your_object][:companyName]。 e.g。

params.require(:your_object).permit(:client_id, ... , :companyName)

在此之前,请确保您的client_id在同一个对象中并允许并将其应用于companyName属性

希望这有助于