Запросить отношения в ruby ​​на рельсах и обновить результаты через Ajax - PullRequest
2 голосов
/ 10 января 2012

У меня есть приложение 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"

Большое спасибо за просмотр этого, я знаю, что это довольно долго, но я был бы признателен за любую помощь, которую вы могли бы предложить. Также спасибо за уделенное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...