0

フォームが検証されない理由がわかりません。テキストフィールドに値がなくても create メソッドが実行されます ここで使用するコードは次のとおりです

class MoviesController < ApplicationController
  def new 
    @movie = Movie.new
    @movies = Movie.find(:all)
  end

  def create
    @movie = Movie.new(params[:movie])
    if @movie.save
      redirect_to "http://localhost:3000/movies/new/"
    end
  end
end

モデル

class Movie < ActiveRecord::Base
  attr_accessible :title, :year

  validates_presence_of :title
  validates_presence_of :year

end

これがビューです

Enter new movie information 
<%= form_for @movie do |f|%><br />
    Title <%= f.text_field :title %><br />
    Year <%= f.text_field :year %><br />
    <%= f.submit %>
<% end %>

<hr />
List of all movies<br />
<% if !@movies.blank? %>
  <% for item in @movies %>
    <%= item.id %>&nbsp;<%=  item.title %> (<%= item.year %>) <br />
  <% end %>
<% else %>

<% end %>
4

2 に答える 2

1

コントローラー内

  def create
    @movie = Movie.new(params[:movie])
    if @movie.save
      redirect_to new_movie_path  # You sure you what to redirect this to new after success? 
                                  # redirect as per your project requirement on success
    else
      render :new # render new with errors displayed
    end
  end

View では、検証が失敗した場合のエラー表示メッセージが追加されました

<%= form_for @movie do |f|%>
  <% if @movie.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@movie.errors.count, "error") %> prohibited this from being saved:</h2>
        <ul>
        <% @movie.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
    <br />
    Title <%= f.text_field :title %><br />
    Year <%= f.text_field :year %><br />
    <%= f.submit %>
<% end %>

<hr />
List of all movies<br />
<% if !@movies.blank? %>
  <% for item in @movies %>
    <%= item.id %>&nbsp;<%=  item.title %> (<%= item.year %>) <br />
  <% end %>
 <% else %>
   No Movies found.
<% end %>
于 2012-07-02T10:14:47.593 に答える
0

@movie.save を呼び出すと、検証が行われます。@movie が有効でないため、#save は false を返し、@movie.errors が入力されます。

この検証によって、フォームの送信 (および #create の実行) が妨げられることはありません。そのためには、JavaScript/jQuery と Rails を使用した検証を検討します。

于 2012-07-02T09:26:43.847 に答える