Hello, good day!
This is a rather intricate question coming from a not so experienced ruby on rails user. Let's get to it:
I am developing an app that has users, authors, microposts and tags. I want to implement something like a retweet button for the microposts:
The task is simple: Get the params of a micropost(original user, original author, original tags) "Retweet" it to my own wall, using these params, but also with my own user_id embedded in it.
So far I managed to "retweet" it, but there is one problem. As it is now, I am copying all the params and creating a new micropost with these params. As this creates exact duplicate, I would like to know what would be the best approach to implement this function without creating replicas all over my app.
Think about the objects and relationships. You want a user to have many retweets (which are microposts) and a micropost must not only have its original owner but also users who have retweeted it.
You have not told us the relationships at the moment but I assume that it is something like user has_many microposts and micropost belongs_to user. This does not quite match what you have as you have author_id but presumably you can sort that bit out.
I would suggest using a join table possibly called retweetings where user has_many retweetings and user has_many retweets through retweetings. Also micropost has_many retweetings and has_many retweeters through retweetings.
Then for retweetings you just need retweeter_id and retweet_id and have retweetings belongs_to :retweeter, :class_name => "user" and belongs_to :retweet, :class_name => "micropost"
You probably need the class_name spec on the has_many through relationships too.
Looking back at the post you seem to have authors and users in different tables. Are you sure that is right, what is the difference between an author and a user?
Colin