I have a model book with a virtual attribute to create an editor from a book form. The code looks like this:
class Book < ActiveRecord::Base has_many :book_under_tags has_many :tags, :through => :book_under_tags has_one :editorial has_many :written_by has_many :authors, :through => :written_by def editorial_string self.editorial.name unless editorial.nil? "" end def editorial_string=(input) self.editorial = Editorial.find_or_create_by_name(input) end end
And a new form:
<% form_for(@book, :html => { :multipart => true }) do |f| %> <%= f.error_messages %> ... <p> <%= f.label :editorial_string , "Editorial: " %><br /> <%= f.text_field :editorial_string, :size => 30 %> <span class="eg">Ej. Sudamericana</span> </p> ...
At the same time, when the form data does not pass the verification, I lost the data sent to the editorial field when the form was repeated, and a new editor was created. How can I solve these two problems? I am new to ruby ββand I cannot find a solution.
UPDATE my controller:
def create @book = Book.new(params[:book]) respond_to do |format| if @book.save flash[:notice] = 'Book was successfully created.' format.html { redirect_to(@book) } format.xml { render :xml => @book, :status => :created, :location => @book } else format.html { render :action => "new" } format.xml { render :xml => @book.errors, :status => :unprocessable_entity } end end end
source share