Hey,
I got a form which looks like this:
-
form_for(@article, :html => {:multipart => true}, :url =>
articles_path) do |f|
= errors_for(@article)
.field
= f.label :text
%br
= f.text_field :text
.field
= f.label :author_id
%br
= f.text_field :author_id
.actions
= f.submit
But since I don’t want anyone to type in an author id I changed it to:
.field
= f.label :author_name
%br
= f.text_field :author_name
added to article.rb:
attr_accessible :author_name
def before_validation
if self.author_name
author_name = self.author_name.split
self.author =
Author.find_or_create_by_firstname_and_lastname(author_name[0],
author_name[1])
end
But now this line:
@article = Article.new(params[:article])
throws this error:
unknown attribute: author_name
I thought attr_accessible would cover that? How can I make this work?
Hi,
added to article.rb:
attr_accessible :author_name
You should use attr_accessor instead (not attr_accessible, as You
don’t have the author_name DB column).
On 20 May 2011 05:01, Heinz S. [email protected] wrote:
.field
%br
author_name[1])
end
But now this line:
@article = Article.new(params[:article])
throws this error:
unknown attribute: author_name
I thought attr_accessible would cover that? How can I make this work?
I think you probably want ‘attr_accessor’ instead of ‘attr_accessible’.
‘attr_accessor’ is a Ruby feature that creates getter and setter
methods (#author_name and #author_name=) for an instance variable.
‘attr_accessible’ is part of Rails’ mass-assignment feature; it
white-lists an existing attribute as assignable via mass-assignment.
They’re easily confused, thanks to the similar names.
Chris
Yes, of course! Thank you guys