我正在做一个简单的运动与两个模型.体育和团队,定义为
rails g scaffold sport name:integer rails g scaffold team name:integer fans:integer sport:references
(注意:我使用脚手架的原因是快速原型设计,所以我可以学习/实验我还不熟悉的部分)
问题是我的“运动”(即外键参考)显示如下
所以有奇怪的#< blahl blah>符号表示法
<%= 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,但它会导致错误未定义的方法“冰球”#< Team:0x3e7e040> …任何想法如何从这里正确显示名称?
解决方法
您正在使用一个text_field引用一个现有的对象,选择运动作为选项将更适合在这里.
这是必须改变的地方:
<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中生成一个选择框,这些选项将使您DB中的所有运动.
一些关于它的文档:
> http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select
> http://guides.rubyonrails.org/form_helpers.html#select-boxes-for-dealing-with-models
更简单的方法是在您的控制器中设置一个变量@sports,然后在您的视图中调用它:
# 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]
原文地址:https://www.jb51.cc/ruby/272777.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。