如何创建用户和朋友之间的挑战类似于Facebook在rails应用程序



我有一个rails应用程序,用户有朋友列表。现在我必须创建一个类似于facebook挑战的挑战,用户可以完成这个过程(玩游戏),他可以挑战他的朋友,他的朋友可以接受或拒绝请求,如果接受,在这个过程(玩游戏)完成后,必须发送给两个用户的消息,其中包含谁赢了。

我该怎么做?

听起来你想要一种叫做Challenge的新型号。这可能有两个关联:

class Challenge < ActiveRecord::Base
  belongs_to :sender, class_name: "User", inverse_of: :sent_challenges
  belongs_to :receiver, class_name: "User", inverse_of: :received_challenges
end

User上对应的关联可以是

class User < ActiveRecord::Base
  # ...
  has_many :sent_challenges,
    class_name: "Challenge", foreign_key: "sender_id", inverse_of: :sender
  has_many :received_challenges,
    class_name: "Challenge", foreign_key: "receiver_id", inverse_of: :receiver
end

那么你也许可以在你的User上有一个方法来发送挑战

def send_challenge(friend)
  sent_challenges.create(receiver: friend)
end

您可能对ChallengesController有一些操作:

def index
  @challenges = current_user.received_challenges
end
def create
  @challenge = current_user.send_challenge(params[:friend_id])
  # now the sender plays the game
  render :game
end
def accept
  @challenge = current_user.received_challenges.find(params[:id])
  # now the receiver plays the game
  render :game
end
def deny
  current_user.received_challenges.destroy(params[:id])
  redirect_to challenges_url
end
def complete
  # happens at the end of the game
  # work out the winner
  # send the emails
end

,当然,您需要添加相应的路由来连接它,并为indexgame编写视图。也许你可以在你的朋友列表中添加指向create行动的链接,这样人们就可以发出挑战。

注意我是如何把所有东西都通过current_user.received_challenges而不是仅仅做一个基本的Challenge.find(params[:id]) -如果你这样做,任何人都可以接受挑战,只是通过猜测id!呵!

我经常说"也许"one_answers"也许",因为有不同的方法可以解决这个问题。但我希望这足以让你开始。如果没有,我建议你试试Rails教程——Michael Hartl的是经典的。

你已经得到has_many :through的关系了吗?

需要将:source传递给users表,因为用户也可以是好友。它看起来像这样:

class User < ActiveRecord::Base
 has_many :friends
 has_many :users, :source => :friend, :through => :friends
end

PS:您需要为好友表创建迁移并运行。

可以向连接表(好友)添加更多列。在那里你可以添加relationship_status。所以最后你有:

<<p> 朋友表/strong>
ID | User_id | Friend_id | relationship_status

基于relationship_status你可以解决你的问题!

相关内容

  • 没有找到相关文章