2016-12-04 4 views
0

を「存在している必要があります」私は、フォーラムのポストクラスの、simple form gemを使用して、このフォームを作成しました:Railsのフォーム協会

<%= simple_form_for @post do |p| %> 
    <%= p.input :title, label: false, placeholder: 'Title', required: true %> 
    <%= p.input :description, as: :text, label: false, placeholder: 'Describe your post', required: true %> 
    <%= p.association :category, label: false, required: true, 
    collection: Category.order(:title), prompt: 'Choose category' %> 
    <%= p.button :submit %> 
<% end %> 

今私はページに移動し、投稿を作成しようと、私はこれを取得します:

Image for Form Error

私は、このオブジェクト(C、C++など)がすべて存在するので、続行するか見当がつかない。ここではそれらが作成された場所seeds.rb

c1 = Category.create(title: "C++", image_url: 'http://www.freeiconspng.com/uploads/c--logo-icon-0.png') 
c2 = Category.create(title: "Rails", image_url: 'http://perfectial.com/wp-content/uploads/2015/02/ruby.png') 
c3 = Category.create(title: "Python", image_url: 'http://python.net/~goodger/projects/graphics/python/newlogo-repro.png') 
c4 = Category.create(title: "Cobol", image_url: 'http://insights.dice.com/wp-content/uploads/2013/06/cobol.png') 
c5 = Category.create(title: "C", image_url: 'https://d13yacurqjgara.cloudfront.net/users/28449/screenshots/1040285/cap-logo-ideas3.png') 
c6 = Category.create(title: "Perl", image_url: 'http://news.perlfoundation.org/onion_logo.png') 

では、はい、私はすくいデシベルを実行しなかった:種子を、それをしようとする前に、サーバーを再起動します。

答えて

4

これは、言語レベルのオブジェクトモデルとはほとんど関係がなく、フレームワーク/ orm固有のものです。 belongs_to Rails 5の関連付けは、デフォルトでは省略可能です。

例えばあなたは、このセットアップを持っているのであれば:

class Post 
    belongs_to :category 
end 

class Category 
    has_many :posts 
end 

post.category_idあなたはcategory_id属性をホワイトリストに忘れてしまった場合nil.Thisを例に発生する可能性がある場合は、検証エラーを取得します。

def post_attributes 
    params.require(:post).permit(:title, :description, :category_id) 
end 

は、さらにオプションとしてcategory協会宣言することができます。

class Post 
    # this was the default behavior in Rails 4 
    belongs_to :category, optional: true 
end 
+0

をあなたはDEF post_attributes' 'もしかして? –

+0

はい、多少のマルチタスクをやっています:) – max

+0

さらに、 'seeds.rb'に' .create! 'を使うべきです - 黙って失敗するのではなく、検証が合格しなければエラーが発生します。 – max