2012-04-29 11 views
0

私は、のUserCategoryProductモデルを持っています。 new製品フォームには、Name(テキスト)、Category(選択)、Price(テキスト)のフィールドしかありません。初心者のレール3:私はこの「作成」方法を正しくやっていますか?

これは私がproducts/new.html.hamlにカテゴリの選択フィールドを作成する方法である:

def create 
    @product = Product.new(params[:product]) 
    if @product.save 
    # do something 
    else 
    render 'new' 
    end 
end 
しかし、私は必要となってしまった:

ProductsController
= f.collection_select :category, Category.all, :id, :name 

、私はこれだけを行う必要があると思いましたCategoryオブジェクトをロードするためのコードを追加し、価格の金額表現(ロケール依存)を10進数に変換します。だから、これは私が働いて得たものである:

def create 
    params[:product][:category] = Category.find(params[:product][:category]) 
    # to_decimal is declared as a private method in ProductsController 
    # and returns a decimal number or nil if the price is invalid 
    params[:product][:price] = to_decimal(params[:product][:price]) 
    @product = Product.new(params[:product]) 
    if @product.save 
    # do something 
    else 
    render 'new' 
    end 
end 

だから私の質問は以下のとおりです。

1) Railsは自動的にカテゴリーをロードする方法はありますか?

2)「フォーマット」の価格は正しく設定されていますか?それはモデルにあるはずのようですが、コントローラーを過ぎても動作させることはできませんでした。

ありがとうございます!

答えて

1

Rails規約ではskinny controller - fat modelというルールがあります。

あなたは、小数モデルに検証を追加することを検討するために、任意の変換を必要としない:あなたの価格を意味

validates :price, :numericality => true, :presence => true 

番号をする必要があり、空にすることはできません。

カテゴリについてはどうですか? は、あなたのProductのテーブルにフィールドcategory_idを追加し、モデルに入れる:

# product.rb 
belongs_to :category 
# category.rb 
has_many :products 

は私達にあなたの形をしてください表示、とあなたの友人とこのページを覚えている: http://guides.rubyonrails.org/

0

あなたの製品テーブルには、「category_id」という列(整数)が必要だと思います。この方法では、追加のコントローラコードなしで選択が機能します。価格については、paramsハッシュから10進数を受け入れる方法があるはずですが、私はあなたのフォームを見る必要があります。

関連する問題