Ok, I've been on this issue for several hours already. If someone with
more RoR experience can help me out. It will be much appreciated.

A small description of what I am trying to do. In the deal show view.
I want to display comments for a particular deal. So far everything
works, except that I am unable to list down the comments. I can submit
comments without any problems.

Here is my code:

social migration:

class CreateSocials < ActiveRecord::Migration
  def self.up
    create_table :socials do |t|
      t.references :user
      t.references :deal
      t.references :entity, :polymorphic => true
      #t.references :commentable, :polymorphic => true


      t.timestamps
    end
  end

  def self.down
    drop_table :socials
  end
end

-----------
social model class

class Social < ActiveRecord::Base
  belongs_to :deal
  belongs_to :user
  belongs_to :entity, :polymorphic => true
  has_many :comments
  #has_one :comment, :dependent => :destroy

  #Social table should have belongs_to :entity, :polymorphic => true
  #t.references :entity, :polymorphic => true
  #belongs_to :entity, :polymorphic => true
end

----------
comment migration:

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      #t.references :user
      #t.references :entity, :polymorphic => true
      #t.integer :commentable_id
      #t.string :commentable_type

      t.text :comment

      t.timestamps
    end
  end

  def self.down
    drop_table :comments
  end
end


--------
comment model class:

class Comment < ActiveRecord::Base
  #belongs_to :user
  #belongs_to :entity, :polymorphic => true

  #has_one :social
  #belongs_to :user

  #def after_create
    #why dont you make the form on Comment, and create the Social
record in Comments after_create hook or something like that?
     #Social.create(:entity => self)
  #end
end

--------
deal migration:

class CreateDeals < ActiveRecord::Migration
  def self.up
    create_table :deals do |t|
      t.references :city
      t.references :user

      t.string :title
      t.text :description
      t.integer :price
      t.integer :value
      t.integer :discount
      t.integer :savings
      t.integer :goal
      t.datetime :countdown
      t.integer :purchased

      t.timestamps
    end
  end

  def self.down
    drop_table :deals
  end
end


-----------
deal model class

class Deal < ActiveRecord::Base
  validates_presence_of :city_id
 
validates_presence_of :title, :description, :price, :value, :discount, 
:savings, :goal, :countdown, :purchased
  validates_length_of :title, :minimum => 5

  belongs_to :city
  belongs_to :user

  has_many :features, :dependent => :destroy
  has_many :photos, :dependent => :destroy

  has_many :socials, :as => :entity
  #has_many :comments, :through => :socials, :source => :comments
  #has_many :socials; has_many :comments, :through => :socials
  #has_many :social, :dependent => :destroy
  #has_many :socials, :as => :entity

  accepts_nested_attributes_for :features, :reject_if => lambda { |a|
a[:description].blank? }, :allow_destroy => true
  accepts_nested_attributes_for :photos, :reject_if => lambda { |a|
a[:photo].blank? }, :allow_destroy => true

  #has_attached_file :photo, :styles => { :small => "150x150>" },
  #                  :url  => "/assets/
deals/:id/:style/:basename.:extension",
  #                  :path => ":rails_root/public/assets/
deals/:id/:style/:basename.:extension"

  #validates_attachment_presence :photo
  #validates_attachment_size :photo, :less_than => 5.megabytes
  #validates_attachment_content_type :photo, :content_type => ['image/
jpeg', 'image/png']


  #def self.search(search, page)
  #  paginate :per_page => 1, :page => page,
  #           #:conditions => ['name like ?', "%#{search}%"],
  #           :order => 'created_at'
  #end

  define_index do
    indexes title, :sortable => true
    indexes description
    #indexes :name, :sortable => true
    #indexes comments.content, :as => :comment_content
    #indexes [author.first_name, author.last_name], :as
=> :author_name
    indexes [user.first_name, user.last_name], :as => :full_name

    #has author_id, created_at
    has created_at
  end

  def comments
  #  self.socials.collect { |a| a.comment }
    #Comment.find(:conditions => 'id = 1')
    self.socials.collect { |a| a.comment }
  end
end

--------
This is my view:
deal show view:

... some html stuff here pertaining to the @deal object ...

<table>
  <tr>
    <th>Comments</th>
  </tr>

<% @deal.comments.each do |comment| %>
  <tr>
    <td><%=h comment.comment %></td>
    <td><%= link_to 'Show', comment %></td>
    <td><%= link_to 'Edit', edit_comment_path(comment) %></td>
    <td><%= link_to 'Destroy', comment, :confirm => 'Are you
sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<% form_for [...@comment, Comment.new] do |f| %>
  <%= f.error_messages %>
        <%= hidden_field_tag :deal_id, params[:id] %>
  <p>
        <%= f.label :comment, 'New comment' %><br />
                <%= f.text_area :comment %>
  </p>
        <p><%= f.submit 'Add comment' %></p>
<% end %>

The problem is. ":through" does not work properly with polymorphic
associations...

Any assistance on this issue is a big help.

-- 
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 rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to