2

I have a ROR app that has many players, and many proposed games. The games display on a feed and a player can decide to hide them from this feed. The hidden function works like this:

in 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

I'm trying to do two things: 1. Write a function that would allow me to hide a game from the feed if a relationship between hidden relationship between game and player exits, and 2. write a "show hidden" button that would allow me to return all projects that were "hidden" by the player.

So far with part 1. I have the following code in the view, and while this does the trick in terms of setting up the relationships, it does not "hide" the game from the feed--I'm guessing I would need ajax for that??

  - 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"

Thank you so much for viewing this, I know it's quite long, but I would appreciate any help you could offer. Also, thank you for you time.

slovak_100
  • 782
  • 2
  • 10
  • 33

0 Answers0