Validate dependent model validation and show error message.

Posted by piemesons on Stack Overflow See other posts from Stack Overflow or by piemesons
Published on 2010-06-07T12:30:36Z Indexed on 2010/06/07 12:32 UTC
Read the original article Hit count: 206

Filed under:
|
|

Just taking a simple example. We have a question on stackoverflow and while posting a question we want to validate title_of_question, description_of_question that they should be present. Now we have a another model tag having habtm relationshio with question model. How to validate that while saving the question. Means question must have some tags. here the code:--

Models:--

 class Question < ActiveRecord::Base
        belongs_to :user
        has_and_belongs_to_many :tags
        has_many :comments, :as => :commentable     
        has_many :answers, :dependent => :destroy

        validates_presence_of :title, :content, :user_id

    end

  class Tag < ActiveRecord::Base
        has_and_belongs_to_many :questions 
        validates_presence_of :tag
    end

Form for entering question and tag

 <div class="form">

        <% form_for :question ,@question, :url => {:action => "create" }  do |f| %>
            <fieldset>
                <%= f.error_messages %>
                <legend>Post a question</legend>  
            <div>
                <%= f.label :title %>:
                <%= f.text_field :title, :size => 100 %>
            </div>

            <div>
                <%= f.label :content ,'Question' %>:
                <%= f.text_area :content, :rows => 10, :cols => 100 %>
            </div>

                <div>
                <%= label_tag 'tags' %>:
                <%= text_field_tag 'tag' ,'',:size=> 60 %> add multiple tag using comma
            </div>

             <div>
                <%= submit_tag "Post question" %>
            </div>
            </fieldset>
        <% end %>

        </div>

From Controller.. (Right now question will be saved without validating tag)

def create
@question = Question.new(params[:question])
@question.user_id=session[:user_id]
 if @question.save
    flash[:notice] = "Question has been posted."
    redirect_to question_index_path
  else
   render :action => "new" 
  end
 end

questions_tags table has been created.

One approach is creating a virtual column using attribute accessors.

another approach is validate associated.

right now assuming new tags can be created.(but not duplicate).

© Stack Overflow or respective owner

Related posts about ruby-on-rails

Related posts about tags