On 20 May 2011 05:01, Heinz Strunk <[email protected]> wrote: > 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?
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 -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

