2016-06-30 6 views
0

ユーザーがフォームを送信してアイテムを作成し、作成したばかりのアイテムにリダイレクトされるレールアプリがあります。Simple_formは入力を検証していません

問題すべてのフィールドが空白のままになっている場合、または必須フィールドのいずれかが空の場合でも、データは引き続き取得され、新しいアイテムが作成されます。

私はrequired: trueプロパティを使用して、データが入力されたことを確認してからデータが入力されないとエラーが発生すると考えました。これは動作していません。

config/initializaers/simple_form.rbファイルでは、config.browser_validations = trueがtrueに設定されています。

誰かが入力がまだ通過している理由を知っていますか?

シンプルなフォルム:

<%= simple_form_for @item do |f| %> 

    <%= f.collection_select :category_id, Category.all, :id, :name, {promt: "Choose a category" }, input_html: { class: " dropdown-toggle" } %> 

    <%= f.input :name, label: "Your Name", required: true, error: 'Your name is required', input_html: { class: "form-control", maxlength: 30} %> 

    <%= f.input :title, label: "Item Title", required: true, error: 'Item title is required', input_html: { class: "form-control", maxlength: 50 } %> 

    <%= f.input :used?, as: :check_boxes, required: true, label: "Is Your Item Used?" %> 

    <%= f.input :price, label: "Item Price", required: true, error: 'Price is required', input_html: { class: "form-control", :placeholder => "$" } %> 

    <%= f.input :description, label: "Item Description", input_html: { class: "form-control" } %> 

    <%= f.input :email, label: "Email", required: true, error: 'Email is required', input_html: { class: "form-control", :placeholder => "[email protected]" } %> 

    <%= f.input :phone, label: "Phone Number", input_html: { class: "form-control", :placeholder => "+61 --- --- ---", :value => "+61 " } %> 

    <%= f.input :suburb, label: "Suburb", required: true, error: 'Suburb is required', input_html: { class: "form-control" } %> 

    <%= f.input :image, label: "Upload An Image (Must be less than 2mb)" %> 

    <%= f.button :submit %> 

<% end %> 

項目モデル:

class Item < ActiveRecord::Base 
belongs_to :category 
belongs_to :user 
end 

アイテムコントローラー:simple_formのドキュメントから

class ItemsController < ApplicationController 
before_action :find_item, only: [:show, :edit, :update, :destroy] 
before_filter :authenticate_user!, except: [:index, :show] 

def show 
end 

def new 
    @item = current_user.items.build 
end 

def create 
    @item = current_user.items.build(items_params) 

     if @item.save 
      redirect_to @item 
     else 
      render "New" 
     end 
end 

def edit 
end 

private 

def items_params 
    params.require(:item).permit(:name, :title, :price, :description, :used?, :email, :phone, :suburb, :category_id, :image, :search) 
end 

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

答えて

1

デフォルトでは、すべての入力が必須です。フォームオブジェクトにそのフィールドに存在する 検証が存在する場合、Simple Formは必要なフィールドと別のフィールドを別々に と区別します。パフォーマンス上の理由から、 などの条件付きオプションを使用する検証では、この検出は がスキップされます。ifおよび:unless。

あなたのアイテムモデルに存在の検証を追加することができます。 validates :name, presence: true入力ごとに手動でメッセージをこのように含める必要はありません。

+0

大きな感謝、私はフォームから必要なプロパティを削除し、モデルに検証を追加し、それは動作します!ユーザーが[送信]ボタンをクリックしても必須のフィールドをすべて記入していない場合、「すべての必須フィールドを入力する必要があります」という行に沿って何かを示すエラーが表示されますか? –

+0

うれしかったです。レールバリデーションのドキュメントにはおそらくあなたが探している答えがあります。 ':message'(http://guides.rubyonrails.org/active_record_validations.html#message)のセクションを見てください。 – gonzalo2000

+0

ありがとう。また、私はちょうど問題があります。すべての入力を記入したフォームを提出すると、このエラー 'テンプレート・アイテムの欠落/新規、アプリケーション/新規{{ロケール=> [:en]、:フォーマット=> [ [:html]、:variants => []、:ハンドラ=> [:erb、:ビルダー、:raw、:ruby、:coffee、:jbuilder]}。 テンプレートはありません。過去にフォームに記入したばかりのときに、私が作成したばかりのアイテムにリダイレクトされました –

関連する問題