1

検証要件を満たしていないメッセージをフォームにフラッシュしようとしていますが、これを実現する方法がわかりません。

私は次の設定をしています:

models / item.rb

class Item < ActiveRecord::Base
  attr_accessible :condition, :day, :description, :subtitle, :title

  validates :user_id, presence: true
  validates :title, presence: true
  validates :description, presence: true, length: { minimum: 20 }

  belongs_to :user
end

controllers / items_controller.rb

class ItemsController < ApplicationController
before_filter :authenticate_user!

def new
    @item = Item.new
end

def show
    @item = Item.find(params[:id])
end

def create
    @item = current_user.items.build(params[:item])
    if @item.save
        flash[:success] = "Your item has been saved"
        redirect_to root_path
    else

        render 'new'
        end
    end

    def destroy
        @item.destroy
        redirect_back_or root_path
    end

end

そして最後にviews/items / new.html.erb

<h1>Items Base</h1>

<div class="row">
    <div class="span6 offset3">

        <%= form_for(@item) do |f| %>

        <%= f.label :title, "Title" %>
        <%= f.text_field :title %>

        <%= f.label :subtitle, "Subtitle" %>
        <%= f.text_field :subtitle %>

        <%= f.label :condition, "Condition" %>
        <%= f.number_field :condition %>

        <%= f.label :description, "Description" %>
        <%= f.text_field :description %>

        <%= f.label :day, "Day" %>
        <%= f.text_field :day %>

        <%= f.submit "List", class: "btn btn-large btn-primary" %>
        <% end %>

    </div>
</div>

基本的に、「説明が短すぎます!」というメッセージをフラッシュできるようにしたいと思います。ユーザーが空白または20文字未満のままにした場合、または空白のままにした場合は「タイトルが必要です」というメッセージを点滅させます。これを達成するための最善の方法についての考え。また、誰かがフラッシュを扱う上で良いリソースを持っているなら、それは大いにありがたいです。ありがとう。

4

1 に答える 1

5

これが私がそれを行う方法です:

フォームは次のとおりです。

<%= form_for(@client) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <%= f.label :company_name %>
  <%= f.text_field :company_name %> 
  <%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
 <% end %>

そして、ここに私のerror_messages部分があります:

<% if object.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-error">
      The form contains <%= pluralize(object.errors.count, "error") %>.
    </div>
    <ul>
    <% object.errors.full_messages.each do |msg| %>
      <li>* <%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>
于 2012-06-17T16:27:20.990 に答える