将另一个表中的数据显示为一种形式 - rails
Posted
技术标签:
【中文标题】将另一个表中的数据显示为一种形式 - rails【英文标题】:Show data from another table into one form - rails 【发布时间】:2016-04-28 17:20:07 【问题描述】:我已经创建了 2 个表
平台:
def change
create_table :platforms do |t|
t.string :name
t.timestamps null: false
end
end
游戏:
def change
create_table :games do |t|
t.string :title
t.text :description
t.string :image_url
t.decimal :price
t.integer :platform_id
t.timestamps null: false
end
add_index :games, :platform_id
end
然后这是我的游戏中的 _form.html.erb
<%= form_for(@game) do |f| %>
<% if @game.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@game.errors.count, "error") %> prohibited this game from being saved:</h2>
<ul>
<% @game.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :image_url %><br>
<%= f.text_field :image_url %>
</div>
<div class="field">
<%= f.label :price %><br>
<%= f.text_field :price %>
</div>
<div class="field">
<%= f.label :platform %><br>
<div>
<%= collection_select( :invoice, :platform_id, Platform.all, :id, :name, , :multiple => false) %>
</div>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
如果我创建新游戏并从选择输入中选择了 PlayStation,当我点击提交时,将显示 Games 表中的字段,例如 title、description、price、image_url 我想显示我之前选择的平台名称,例如 PlayStation 所以我添加了
<p>
<strong>Platform:</strong>
<%= @platform.name %>
</p>
从游戏中显示.html.erb,但当我尝试时,我得到错误
nil:NilClass 的未定义方法“名称”
我错过了什么吗? 我在这里尝试了一些解决方案,但仍然错误 谢谢
【问题讨论】:
您是否在控制器中设置了@platform
实例变量?
什么是@platform
?另外,您确定创建游戏时platform_id
不是nil
?因为collection_select
是错误的。
@Pavan 之前我已经制作了 3 个数据平台。即 PC、PlayStation 和 Xbox。我写 collection_select 有什么错误?
检查platform_id
表中platform_id
的值并告诉我。
@pavan btw 我想我已经解决了:D 我已经将 collection_select
更改为 <%= collection_select( :game, :platform_id, Platform.all, :id, :name, :multiple => false) %>
然后我将 <%= @platform.name %>
更改为 <%= @game.platform.name %>
我尝试添加游戏然后我选择平台和所有数据都可以显示。我不知道我所做的collection_select
是否正确,但感谢您提供线索:D
【参考方案1】:
您可以通过 @game 变量中的 belongs_to 关联来检索它。
<p>
<strong>Platform:</strong>
<%= @game.platform.name %>
</p>
【讨论】:
仍然得到 nil:NilClass 的未定义方法 `name' 关联设置是否正确。提交表单时的日志消息是什么。 检查 strong_parameters 没有将 platform_id 参数列入黑名单。还要检查 rails 控制台中的游戏记录,以确保您确实正确保存了它。在我看来,collection_select 有点可疑 请向我们展示您的 controllers/games_controller.rb 和 models/game.rb。可能他们有什么问题。可能是模型之间的错误关系或 strong_parameters 做得不好。以上是关于将另一个表中的数据显示为一种形式 - rails的主要内容,如果未能解决你的问题,请参考以下文章