0

TwitterBootstrapを使用して検証を適切に処理するためのサポートが必要です。検証は正しく機能しています。問題はTwitterBootstrapFlash画面です。これは私が意味することです:

記入および提出された返品のフィールドはありません:http://i.stack.imgur.com/8pvUc.png

送信された必須の4つのフィールドのうち2つが返されます:http://i.stack.imgur.com/J6lCi.png (エラーがフラッシュされないことに注意してください)

私は、プレーヤーが(プレーヤー名簿のアーカイブ目的で)多くの名簿に参加でき、名簿に多くのプレーヤーが参加できるバスケットボールアプリを持っています。

Roster.rb

class Roster < ActiveRecord::Base
  belongs_to :team
  has_many :rosterizes
  has_many :players, :through => :rosterizes
  accepts_nested_attributes_for :players
  validates_presence_of :jersey_number, :class_year
  attr_accessible :jersey_number, :class_year, :players, :team_id, :players_attributes
end

Rosterizes.rb(私が知っている貧弱な名前...)

class Rosterize < ActiveRecord::Base
  belongs_to :player
  belongs_to :roster
  attr_accessible :player_id, :roster_id
end

Player.rb

class Player < ActiveRecord::Base
  has_many :rosterizes
  has_many :rosters, :through => :rosterizes
  validates_presence_of :first_name, :last_name
  attr_accessible :first_name, :last_name, :active
end

_add_player_form.html.erb (ネストされたフォーム)

<%= simple_nested_form_for @roster, :url =>player_added_team_path, :html => { :class => 'form-horizontal' } do |f| %>   
    <%= f.simple_fields_for :players, @roster.players.build do |x| %>
        <%= x.input :first_name %>
        <%= x.input :last_name %>
        <%= x.input :active, :as => :hidden, :input_html => {:value => true} %>
    <%end%>
    <%=f.input :class_year %>       
    <%=f.input :jersey_number %>
    <%=f.input :team_id, :as => :hidden, :input_html => {:value => params[:id]}%>

    <div class="well">
    <%= f.button :submit, :class => 'btn-primary icon-plus-sign btn-success', :value => "Add To Team" %>
    </div>
<%end%>

よろしくお願いします!

解決

私の問題は、ビューが読み込まれるたびに新しいフォームが作成されていたため、ロールバックでエラーが返されなかったことです。

ネストされたフォーム用にビルドするコントローラーに変更を加えました

コントローラ

def add_player
     ...
     @new_player = @roster.players.build
end

そして、ビューに応じて変更を加えました

_add_player_form.html.erb

<%= f.simple_fields_for :players, @new_player do |x| %>
     ...

<%end%>

これでうまくいきました、Moberに感謝します!

4

2 に答える 2

2

最初のレベルの検証のみが表示され、関連付けられていないことが示される理由はかなり単純です...<%= f.simple_fields_for :players, @roster.players.build do |x| %>サイトがレンダリングされるときに常に新しい関連付けを構築するaを実行します。あなたがしたいのは、それがまだ存在しない場合にのみ関連付けを構築することです...

<% @roster.players.build if !@roster.players %>
<%= f.simple_fields_for :player do |player_form| %>
...
<% end %>
于 2012-04-24T15:16:07.153 に答える
0

Twitter Bootstrapは実際には何も検証せず、検証クラス(、、など)のスタイルを提供するだけです。errorsuccess

さて、私は決してRubyの専門家ではありませんが、フォームを早期に終了しているようです。

    <%= f.simple_fields_for :players, @roster.players.build do |x| %>
        <%= x.input :first_name %>
        <%= x.input :last_name %>
        <%= x.input :active, :as => :hidden, :input_html => {:value => true} %>
    <%end%>   <---- here
    <%=f.input :class_year %>       
    <%=f.input :jersey_number %>
    <%=f.input :team_id, :as => :hidden, :input_html => {:value => params[:id]}%>

これでいいの?

    <%= f.simple_fields_for :players, @roster.players.build do |x| %>
        <%= x.input :first_name %>
        <%= x.input :last_name %>
        <%= x.input :active, :as => :hidden, :input_html => {:value => true} %>        
        <%= f.input :class_year %>       
        <%= f.input :jersey_number %>
        <%= f.input :team_id, :as => :hidden, :input_html => {:value => params[:id]}%>
    <% end %>
于 2012-04-21T16:12:19.520 に答える