У меня есть приложение ROR, в котором много игроков и множество предлагаемых игр. Игры отображаются в ленте, и игрок может решить скрыть их от этой ленты. Скрытая функция работает так:
в player.rb:
has_many :hides, :foreign_key=> "hider_id",
:dependent => :destroy
has_many :hidees, :through => :hides
def hidden?(hidee)
hides.find_by_hidee_id(hidee)
end
def hide!(hidee)
hides.create!(:hidee_id => hidee.id)
end
def unhide!(hidee)
hides.find_by_hidee_id(hidee).destroy
end
hides_controller.rb
class HidesController < ApplicationController
def create
@game = Game.find(params[:hide][:hidee_id])
current_profile.hide!(@game)
redirect_to :back
end
def destroy
@game = Hide.find(params[:id]).hidee
current_profile.unhide!(@game)
redirect_to :back
end
end
hide.rb
class Hide < ActiveRecord::Base
attr_accessible :hidee_id
belongs_to :hider, :class_name => "Player"
belongs_to :hidee, :class_name => "Game"
validates :hider_id, :presence => true
validates :hidee_id, :presence => true
end
game.rb
has_many :reverse_hides, :foreign_key => "hidee_id",
:class_name => "Hide",
:dependent => :destroy
has_many :hiders, :through => :reverse_hides
routes.rb
resources :games do
member do
post :publish
post :unpublish
get :view
get :hidees, :hiders
end
Я пытаюсь сделать две вещи: 1. написать функцию, которая позволяла бы мне скрывать игру из ленты, если между скрытыми отношениями между игрой и игроком возникает связь, и 2. написать кнопку «показать скрытую» это позволило бы мне вернуть все проекты, которые были «скрыты» игроком.
Пока что с частью 1. У меня есть следующий код в представлении, и хотя это помогает при настройке отношений, оно не «скрывает» игру от канала - я думаю, я для этого нужен ajax ??
- if current_profile.hidden?(game)
= form_for current_profile.hides.find_by_hidee_id(game), :html => { :method => :delete } do |f|
= f.submit "Unhide", :title => "Unhide this game."
- else
= form_for current_profile.hides.build(:hidee_id => game.id) do |f|
= f.hidden_field :hidee_id
= f.submit "Hide", :title => "Hide this game"
Большое спасибо за просмотр этого, я знаю, что это довольно долго, но я был бы признателен за любую помощь, которую вы могли бы предложить. Также спасибо за уделенное время.