ruby-on-rails - Rails - 在表单中显示外键引用

标签 ruby-on-rails ruby forms views

我正在用两个模型做一个简单的练习。运动和团队,定义为

rails g scaffold sport name:integer
rails g scaffold team name:integer fans:integer sport:references

(Note: The reason I'm using scaffold is rapidly prototyping so I can learn/experiment with the parts I'm not familiar with yet)

Problem is that my "sport" (i.e. the foreign key reference) is showing like the following enter image description here

So it's got that weird #<blahl blah> notation to it...

<%= form_for(@team) do |f| %>
  <% if @team.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@team.errors.count, "error") %> prohibited this team from being saved:</h2>

      <ul>
      <% @team.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
     <div class="field">
    <%= f.label :fans %><br />
    <%= f.number_field :fans %>
  </div>
  <div class="field">
    <%= f.label :sport %><br />
    <%= f.text_field :sport %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我试过将一行更改为 @team.sport.name但它会导致错误 undefined method 'Ice Hockey' for #<Team:0x3e7e040> ...关于如何从此处正确显示名称的任何想法?

最佳答案

您正在使用 text_field 来引用现有对象,将 Sports 作为选项的 select 在这里更合适。

这是必须更改的地方:

<div class="field">
  <%= f.label :sport %><br />
  <%= f.text_field :sport %>
</div>

收件人:

<div class="field">
  <%= f.label :sport %><br />
  <%= f.select :sport_id, options_for_select(Sport.all.map{|s|[s.name, s.id]}) %>
</div>

f.select 将在 HTML 中生成一个选择框,选项将包含您数据库中的所有运动。

一些关于它的文档:

更简洁的方法 是在您的 Controller 中设置一个变量 @sports 然后在您的 View 中调用它:

# in controller
def edit
  @sports = Sport.scoped
  #...

# in edit view
<div class="field">
  <%= f.label :sport %><br />
  <%= f.select :sport_id, options_for_select(@sports.map{ |s| [s.name, s.id] }) %>
</div>

附加信息:如果您想为选择“预选”一个选项,您必须将它作为 options_for_select 助手的第二个参数传递:

options_for_select(@sports.map{ |s| [s.name, s.id] }, params[:sport_id])
# this will select by default the option that matches the value of params[:sport_id]

关于ruby-on-rails - Rails - 在表单中显示外键引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848702/

相关文章:

javascript - 根据提交结果隐藏表单上的文本打开显示文本

javascript - 防止在单击按钮时提交表单时重新加载页面

ruby-on-rails - 防止自动机器人向 ruby​​ on rails 应用程序提交表单?

ruby-on-rails - 在 Ruby on Rails 中通过其引用模型(子模型?)查找模型

ruby-on-rails - Microsoft Translator API 回答 500 内部服务器错误

ruby-on-rails - Ruby:如何存储和显示星期几?

ruby-on-rails - 如何强制执行 BigDecimal 的有效位数

java - Wicket - IValidator 在 TextField 为空时不调用验证

ruby-on-rails - 将没有默认值的 NOT NULL 字段添加到填充的数据库中

javascript - 将 Angular 注入(inject) Rails