在 ruby​​ on Rails 中查询关系并通过 Ajax 更新结果

发布于 2024-12-25 22:44:59 字数 2181 浏览 2 评论 0原文

我有一个 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

paths.rb

  resources :games do
    member do
      post :publish
      post :unpublish
      get  :view
      get  :hidees, :hiders
    end

我正在尝试做两件事: 1. 编写一个函数,允许我从提要中隐藏游戏,如果游戏和玩家退出之间的隐藏关系之间的关系,以及 2. 编写一个“显示隐藏”按钮,该按钮允许我返回玩家“隐藏”的所有项目。

到目前为止,第 1 部分。我在视图中有以下代码,虽然这在设置关系方面起到了作用,但它并没有从 feed 中“隐藏”游戏——我猜我需要 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"

非常感谢您查看本文,我知道它很长,但我将不胜感激您提供的任何帮助。另外,感谢您抽出时间。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文