3

私は間違いなく少し初心者なので、これは私が見落としている単純なものかもしれませんが、解決策を見つけようとして行った検索は空になりました.

formtastic を使用して 5 つの入力フィールドを持つフォームを作成しました。2 つはテキスト ボックスで、3 つは選択リストです。

<%= 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

オブジェクトを String に変換する場合、Ruby はto_s文字列変換のメソッドを提供しない限り、ご覧のようにメモリ アドレスに変換します。私は formtastic を使用していませんがto_s、League クラスにメソッドを追加すると、必要なものが表示されるはずです。

追加してみる

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

リーグクラスへ。

于 2012-12-12T19:19:22.513 に答える
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

選択リスト内でテキストおよび 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の Usage セクションにあります。

于 2012-12-12T21:43:42.943 に答える
0

使ってみてください:

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

これにより、Formtastic 列選択の命名規則がオーバーライドされます。もご覧ください:列名規則のオーバーライド wiki

これが役に立ったことを願っています。

于 2014-05-02T21:00:59.220 に答える