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?
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
.