0

つまり、ディスカッションの内容とタイトルの両方を検証しているので、作成時にユーザーIDをディスカッションにマージしているからだと思います。

ディスカッションモデル

class Discussion < ActiveRecord::Base  
  attr_accessible :user_id, :content, :title

  has_many :discussion_comments, :dependent => :destroy
  belongs_to :user

  validate :content, :presence => true,
                     :length => {:minimum => 10, :maximum => 254}
  validate :title, :presence => true,
                   :length => {:minimum => 10, :maximum => 254}
end

ディスカッションコントローラー

  def create
    @discussion = Discussion.create(params[:discussion].merge(:user_id => current_user.id))
    if @discussion.save
      redirect_to tasks_path, :flash => {:success => 'Created a new discussion'}
    else
      redirect_to tasks_path, :flash => {:error => 'Cannot create empty discussions.'}
    end
  end

とにかく、空のフォームを保存しようとするたびに、エラーメッセージが表示されるはずのときに成功メッセージが表示されます。

ディスカッションフォーム

<%= form_for @discussion do |f| %>

    <p><%= f.label :title %>
    <%= f.text_field :title %></p>

    <p><%= f.label :content %>
    <%= f.text_area :content %></p>

    <p><%= f.submit %></p>

<% end %>

述べたように、作成時にユーザーIDをマージしているという事実と関係があると思いますが、検証によって作成プロセス全体が停止する必要があります。

4

1 に答える 1

2

これはRails3.xですか?validatesnotを使用してみてくださいvalidate。単純なタイプミスかもしれません。

それで...

class Discussion < ActiveRecord::Base  
  ...

  validates :content, :presence => true,
                      :length => {:minimum => 10, :maximum => 254}
  validates :title, :presence => true,
                    :length => {:minimum => 10, :maximum => 254}
end

参照:http://guides.rubyonrails.org/active_record_validations_callbacks.html#presence

例にリンクしますが、どのオプションを渡すかに関係なく、presence例にリンクする必要があります。validates

于 2012-09-07T14:58:50.310 に答える