Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从模型数据库获取数据以填写另一个模型表单_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何从模型数据库获取数据以填写另一个模型表单

Ruby on rails 如何从模型数据库获取数据以填写另一个模型表单,ruby-on-rails,ruby,Ruby On Rails,Ruby,我还是rails的初学者。我想根据关联选择,用数据库中已有的另一个模型的数据填充模型中的某个表单字段。下面是我的代码 股票购买模式 class StockPurchase < ApplicationRecord belongs_to :stock end class Stock < ApplicationRecord has_many :stock_purchases end 从表格中,我想根据所选股票从数据库中填写到期日和售价 请告诉我该怎么做。这将在下拉选择字

我还是rails的初学者。我想根据关联选择,用数据库中已有的另一个模型的数据填充模型中的某个表单字段。下面是我的代码

股票购买模式

class StockPurchase < ApplicationRecord
    belongs_to :stock
end
class Stock < ApplicationRecord
    has_many :stock_purchases
end
从表格中,我想根据所选股票从数据库中填写到期日和售价


请告诉我该怎么做。

这将在下拉选择字段中显示股票,用户选择股票,然后您可以在控制器中提取到期日期和售价,当然只需将变量切换到您设置的值即可

<%= f.field_container :stock do %>
  <%= f.label :stock %>
  <%= f.select :stock_id, options_for_select(Stock.all.map{|s|[s.name, s.id]}) %>
<% end %>

但是,您不必提取这些属性并在股票购买中重复自己的操作,因为您可以从股票购买的子项调用这些属性(售价、到期日),如

StockPurchase.stocks.all.first.selling\u price


但这当然取决于变量的命名方式

控制器中是否有代码?控制器中是否只有“new”或“edit”?您在上面发布的“表单”是否重复用于“新建”和“编辑”?因为这是您刚刚创建的新方法“@stock\u purchase”没有字段,所以您必须先填充这些字段,然后才能转到您的表单。尝试控制器“@stock\u purchase.expiration\u date=DateTime.now”感谢snake的评论,但我想实现的是,当从stock select字段中选择股票时,到期日和售价应该使用所选的股票id从所选股票数据库表中获取,并填写到期日和售价U可以使用JS实现这一点。创建一个事件侦听器,该侦听器在选择更改时激发。让它向服务器发出AJAX请求,然后发回您需要的数据。谢谢您的回答。我真的想用javascript/jquery或ajax在选择股票后自动从数据库中获取股票售价和有效期,并用它填充售价和有效期输入字段。我还是搞不懂
def new
    @stock_purchase = current_user.stock_purchases.build
    @stocks = Stock.all 
end
<%= f.field_container :stock do %>
  <%= f.label :stock %>
  <%= f.select :stock_id, options_for_select(Stock.all.map{|s|[s.name, s.id]}) %>
<% end %>