VALIDATION QUESTION

I'm trying to validate a record before save. I'm using one controller
in this case furnii where I have all my calls. The problem is that, the
form containing the field I'm trying to validate resides in the furnii
views. I tried to add validates_presence_of :content (the field name) in
both the furnii model and the ratecomment model but it does not work. I
know there are ways around this, suggestions anyone?

#########controller code
def rate
     @furnii = Furni.find(params[:id])
     Rating.delete_all(["rateable_type = 'Furni' AND rateable_id = ?",
@furnii])
      @furnii.add_rating Rating.new(:rating =>
params[:ratecomment]["rating"])
      @comments = Ratecomment.new(params[:ratecomment])
       if @comments.save
         redirect_to furni_path(@furnii)
       end
  end

Sam,
If you have

class Ratecomment < ActiveRecord::Base
    validates_presence_of :some_field

Then @comments.save should return false and the new instance of
Ratecomment not retained if :some_field is blank, regardless of what
controller it's called in.

Is that what you mean and what is not happening?

smeade wrote:

Sam,
If you have

class Ratecomment < ActiveRecord::Base
    validates_presence_of :some_field

Then @comments.save should return false and the new instance of
Ratecomment not retained if :some_field is blank, regardless of what
controller it's called in.

Is that what you mean and what is not happening?

On Aug 27, 12:56�pm, Sam Ginko <rails-mailing-l...@andreas-s.net>

yes that is the issue.

########this is the model
class Ratecomment < ActiveRecord::Base
  validates_presence_of :content
end

##############this is the view

<% form_tag( "rate?id=#{@furnii.id}", :name => "theform") do %>
<table border="0" width="450" cellpadding="3" cellspacing="0">

  <tr><td colspan=2><%= error_messages_for 'furni' %></td></tr>
  <tr>
    <td class="txtBlackSmall" valign=top colspan=2>
    <table border="0" cellspacing="0" cellpadding="4">
      <tr>
        <td class="headerBlackSmall">Rate it: &nbsp; &nbsp;&nbsp;</td>
        <td class="txtBlackSmall">1 <%= radio_button "ratecomment",
"rating", "1", :checked => "checked"%></td>
        <td class="txtBlackSmall">2 <%= radio_button "ratecomment",
"rating", "2" %></td>
        <td class="txtBlackSmall">3 <%= radio_button "ratecomment",
"rating", "3" %></td>
        <td class="txtBlackSmall">4 <%= radio_button "ratecomment",
"rating", "4" %></td>
        <td class="txtBlackSmall">5 <%= radio_button "ratecomment",
"rating", "5" %></td>
      </tr>
    </table>
    </td>
  </tr>
  <tr>
    <td class="headerBlackSmall" colspan=2>
      <label for="content">Add comment</label><br>

                           <%= text_area :ratecomment, :content,
:rows=>"6", :cols=>"60" %><br>
    </td>
  </tr>

  <tr bgcolor="ffffff">
    <td><%= link_to 'cancel''''', index_furnii_path()%></td>
    <td align=right>
      <%= submit_tag "Submit" %>
    </td>
  </tr>
</table>

<%= hidden_field :ratecomment, :rateable_id, :value => @furnii.id %>
<% end %>

To clarify, is the Ratecomment getting created and saved or just the
Rating is getting applied to the furnii? How do you know the
Ratecomment is getting created, is it shown in another view or you see
it in the database?

smeade wrote:

To clarify, is the Ratecomment getting created and saved or just the
Rating is getting applied to the furnii? How do you know the
Ratecomment is getting created, is it shown in another view or you see
it in the database?

the Ratecomment gets created and saved in the database with a furnii_id.
I'm redirecting it to the view in the furnii and it shows up no problem.
the issue is if the user does not type anything in the text area field
and submits. The validation some how is trying to look for a view.

The code does not appear to handle the case when @comments.save fails,
so the default is to display the view for rate, which probably does
not exist (it looks like rate is defined to handle only the posting of
the form). It seems likely that you need something like this for the
case when @comments.save fails:

render :action=>rate_form