3

我绝对是一个菜鸟,所以这可能是我忽略的一些简单的事情,但是,我为尝试找到解决方案所做的搜索是空的。

我使用具有 5 个输入字段的 formtastic 构建了一个表单:两个是文本框,三个是选择列表。

<%= semantic_form_for @player do |f| %>
<%= f.inputs do %>
    <%= f.input :firstname, :label => "First Name " %>
    <%= f.input :lastname, :label => "Last Name " %>
    <%= f.input :leagueid, :as => :select, :collection => League.all(:order => :leaguename), :label => "League " %>
    <%= f.input :team_1, :as => :select, :collection => Team.all(:order => :name), :label => "Team 1 " %>
    <%= f.input :team_2, :as => :select, :collection => Team.all(:order => :name), :label => "Team 1 " %>
<% end %>
    <%= f.actions %>
  <% end %>

正在发生的事情是团队列表完美运行(显示团队名称)。然而,联赛名单是另一回事。列表中的所有条目如下所示(在“League:”之后有不同的代码):

#<League:0x007fe29c406498>

如果我使用表单创建播放器,它工作正常。正确的联赛 ID 会进入数据库和所有内容。我只是想不通为什么球队的名字会显示,而无论是什么都显示的是联盟。

任何和所有的帮助表示赞赏。

4

4 回答 4

3

to_s将对象转换为字符串时,除非您提供字符串转换的方法,否则 Ruby 会将它们转换为您所看到的内存地址。我没有使用过formtastic,但我相信向to_s您的League 类添加一个方法应该会使其显示您想要的内容。

尝试添加

def to_s
  @name    # use whatever you want to be displayed. 
end

到联赛班。

于 2012-12-12T19:19:22.513 回答
0

您可以尝试在选择列表中明确指定应用作文本和 id 的字段。我相信它看起来像。

<%= f.input :leagueid, :as => :select, :collection => Hash[League.all.map { |league| [league.leaguename, league.id] }]

语法很疯狂。对 map 的调用返回一个名称/id 对数组,例如[ ['league1', 1], ['league2', 2] ]. 调用Hash它会将其转换为哈希,例如{'league1' => 1, 'league2' => 2}. 似乎选择列表应该使用这个哈希来填充自己。

http://rdoc.info/github/justinfrench/formtastic的“使用”部分下有一个示例。

于 2012-12-12T21:43:42.943 回答
0

:member_name 是我认为的解决方案。

<%= f.input :leagueid, :as => :select, :collection => League.all(:order => :leaguename), :label => "League " %>

可能会为你工作

<%= f.input :leagueid, :as => :select, :member_name => :league, :collection => League.all(:order => :leaguename), :label => "League " %>

我的问题是我有一个模型的字段与模型同名,我认为这让 Formtastic 感到困惑

脚手架示例:

  rails g scaffold Countries code:string country:string
  rails g scaffold Types title:string description:string

模型:

class Sign < ActiveRecord::Base   
attr_accessible :title, :country_id, :type_id 
belongs_to :country   
belongs_to :type

表单视图:

<%= f.input :type %>
<%= f.input :country, :member_label => :country  %>

没有 member_label 的表单会导致对象 ID 显示在国家/地区的选择框中,尽管 ID 已正确保存。类型选择在没有声明 member_label 的情况下完美运行。请注意,我不需要指定:as => :select,因为 formtastic 可以从 belongs_to 关系中推断出这一点。

于 2013-04-17T11:11:32.200 回答
0

尝试使用:

<%= form.input :league, :member_label => :leaguename %>

这将覆盖 Formtastic Column Select 的命名约定。还请查看:覆盖列名称约定 wiki

希望这有帮助。

于 2014-05-02T21:00:59.220 回答