Najpierw musisz skonfigurować bazę danych, aby sobie z tym poradzić, osobiście skorzystałbym ze skojarzenia has_many: through, ponieważ zapewnia on większą elastyczność niż has_and_belongs_to_many. Wybór należy jednak do Ciebie. Polecam przejrzeć różne typy w interfejsie API i samemu zdecydować. Ten przykład zajmie się has_many: through.
modele
# user.rb (model)
has_many :favorites
has_many :posts, :through => :favorites
# post.rb (model)
has_many :favorites
has_many :users, :through => :favorites
# favorite.rb (model)
belongs_to :user
belongs_to :post
Controller
# favorites_controller.rb
def create
current_user.favorites.create(:post_id => params[:post_id])
render :layout => false
end
Trasy
match "favorites/:post_id" => "favorites#create", :as => :favorite
jQuery
$(".favorite").click(function() {
var post_id = $(this).attr('id');
$.ajax({
type: "POST",
url: 'favorites/' + post_id,
success: function() {
// change image or something
}
})
})
Uwagi
ten zakłada kilka rzeczy: Używanie Rails 3, stosując jQuery, każdy ulubiona ikona ma identyfikator HTML z identyfikatorem pocztowym. Pamiętaj, że nie przetestowałem kodu i napisałem go w tym oknie, więc prawdopodobnie musisz naprawić pewne drobne problemy, ale powinno to dać ci wrażenie, jak zwykle to robi. Rzeczy wizualne i takie zostawię wam.
Jeśli zauważysz jakieś błędy, możesz edytować ten post.