Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Render RABL partials with polymorphic models

I have a data model where a User can like a Project, Suggestion, Comment, or other objects. The models are set up correctly, and likes/show.rabl works if we were just to support the Project child

object @like
attributes :id, :created_at, :target_type, :target_id, :user_id
child :user => :user do
  extends "users/show"
end
child :target do
  node do |project|
    partial('projects/show', :object => project)
  end
end

However, I want to be able to use partials of suggestions/show, comments/show as well depending on target_type.

I tried this but it's not working:

child :target do |u|
  u.target.map do |r|
    if r.is_a?(Suggestion)
      partial("suggestions/show", :object => r)
    elsif r.is_a?(Project)
      partial("projects/show", :object => r)
    end
  end
end

I get undefined method target for <Rabl::Engine:0x69fb988>. However, I don't get this error in the first case. Any ideas?

like image 652
netwire Avatar asked Dec 05 '25 20:12

netwire


2 Answers

Have you tried using extends instead of partial?

Perhaps you could try something like this?

child :target do |u|
  u.target.map do |r|
    if r.is_a?(Suggestion)
      extends "suggestions/show"
    elsif r.is_a?(Project)
      extends "projects/show"
    end
  end
end

In this case, when you use extends, you don't need to pass in an :object because you're already in the scope of iterating through with the object r.

like image 92
richsinn Avatar answered Dec 08 '25 14:12

richsinn


This is what I ended up using and it worked.

Thanks to this post: https://github.com/nesquena/rabl/issues/273#issuecomment-6580713

child :target do
  node do |r|
    if r.is_a?(Suggestion)
      partial("suggestions/show", :object => r)
    elsif r.is_a?(Project)
      partial("projects/show", :object => r)
    end
  end
end
like image 37
netwire Avatar answered Dec 08 '25 16:12

netwire



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!