0

私は自分が間違っていることを理解することができません。

改訂されたrailscast#102からの指示に従っています。

私はモデル記事を持っています:

  belongs_to :category

   def category_name
      category.try(:name)
   end  

   def category_name=(name)
    self.category = Category.find_by_name(name)
   end

Category.rb:

  has_many :articles

Create_categoriesの移行:

  def change
    create_table :categories do |t|
    t.string :name
    t.timestamps
   end
  end

Create_articles:

  def change
  create_table :articles do |t|
  t.string :name
  t.text :content
  t.integer :category_id
  t.timestamps
   end
 end

および_formからのコード:

   <div class="field">
    <%= f.label :category_name %><br />
   <%= f.text_field :category_name %>
  </div>

送信後、次のエラーが発生します。

       Can't mass-assign protected attribute :category_name

編集

     def create
@article = Article.new(params[:article])

respond_to do |format|
  if @article.save
    format.html { redirect_to @article, notice: 'Article was successfully created.' }

  else
    format.html { render action: "new" }
  end
end
end

私のログ:

     Started PUT "/articles/4" for 127.0.0.1 at 2012-10-16 00:59:44 +0300
   Processing by ArticlesController#update as HTML
   Parameters: {"utf8"=>"тЬУ", "authenticity_token"=>"YDPlS//tXg6Adl1npEEyNNBMZI0
   a7hW8bV5XFPmRre4=", "article"=>{"name"=>"112312", "category_name"=>"asdasd"}, "c
   ommit"=>"Update Article", "id"=>"4"}
    ←[1m←[35mArticle Load (0.0ms)←[0m  SELECT "articles".* FROM "articles" WHERE "
   articles"."id" = ? LIMIT 1  [["id", "4"]]
   ←[1m←[36m (0.0ms)←[0m  ←[1mbegin transaction←[0m
   ←[1m←[35mCategory Load (0.0ms)←[0m  SELECT "categories".* FROM "categories" 
 WHERE "categories"."name" = 'asdasd' LIMIT 1
  ←[1m←[36m (0.0ms)←[0m  ←[1mcommit transaction←[0m

  Redirected to http://127.0.0.1:3000/articles/4
  Completed 302 Found in 16ms (ActiveRecord: 0.0ms)

ですから、節約しているように見えますが、私の見解ではわかりません。

 <p>
  <b>Category:</b>
  <%= @article.category %>
 </p>

空白を与えてくれます。

4

1 に答える 1

2

この行を機能させるには、この行をモデル<%= f.text_field :category_name %>に追加しますArticle

attr_accessible :category_name

すでにそれを試した場合は、移行を呼び出した後、必ずWebサーバーを再起動してください。

于 2012-10-15T21:50:01.223 に答える