【问题标题】:Follow Twitter Users by Submitting Username通过提交用户名关注 Twitter 用户
【发布时间】:2013-11-09 07:25:01
【问题描述】:

Rails 3.2,Twitter 应用

解决方案见:Can't unfollow user because of Postgres

目标是这样的形式。

username => User => User.id => followed_id => following? => New or Destroy Relationship

这是我目前必须关注的推特用户。

views/users/buddies.html.erb

<%= form_for @relationship do |f| %>
<%= f.text_field :followed_id %>
<%= f.submit "Add" %>

users_controller.rb

def buddies
@relationship =Relationship.new(params[:followed_id])

relationships_controller.rb

    def create
    @relationship = Relationship.new(params[:relationship])
    @relationship.follower_id = current_user.id

    if @relationship.save
        redirect_to buddies_path, notice: "Phriend added"
        else
        flash[:error] = "Phriend not added";
        redirect_to buddies_path
    end

relationship.rb

class Relationship < ActiveRecord::Base
  attr_accessible :followed_id, :follower_id
   belongs_to :follower, class_name: "User"
   belongs_to :followed, class_name: "User"
   validates :followed_id, presence: true
   validates :follower_id, presence: true

user.rb

class User < ActiveRecord::Base
  has_many :follower_relationships, class_name: "Relationship", foreign_key: "followed_id"
  has_many :followed_relationships, class_name: "Relationship", foreign_key: "follower_id" 
  has_many :followers, through: :follower_relationships
  has_many :followeds, through: :followed_relationships

那么它的作用是:

我有 4 个用户:1:benben,2:nicknick,3:stevesteve,4:petepete

这些是他们的 user_id。这也是他们的追随者/编辑I​​D。

奔奔可以输入“2”,跟随“nicknick”等。

我想要一个可以通过提交用户名来关注和取消关注的系统。

所以我想象了这样的事情..

users_controller.rb

  @user = User.find(params[:username])
      if @user
        if current_user.following? @user.id
          Relationship.new(params[:followed_id])
        else
          Relationship.destroy(params[:followed_id])
        end
      end

user.rb

def following? user
self.followeds.include? user
end

你认为什么会起作用?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 twitter


    【解决方案1】:

    您所要做的就是确保您获得了要与之关联的正确用户。

    无论您是按 id 还是按名称搜索都无关紧要。如果您有该用户的活动记录,您只需连接对象即可轻松关联。

    #find by whatever params float your boat
    @user = User.find(params[:user])
    #add the user to the list of followers
    current_user.followers << @user
    current_user.save
    
    #or you could delete
    @lame_follower = current_user.followers.find(1)
    @lame_follower.destroy
    

    【讨论】:

    • 顺便说一句,您的命名约定让我难以遵循。但是,如果您需要更多说明,或者我只是错过了您的问题,请告诉我。
    • 所以我知道的可能比我实际知道的多。在这个应用程序中,我违反了很多规则,所以我觉得这行不通。我经常找不到没有 ID 的用户。
    • 别担心,伙计。这就是我们在这里的原因(学习:D)。作为对您找不到没有 ID 的用户的回应。您是否正在检查将任何内容打印到日志以了解为什么会发生这种情况?尝试使用 logger.debug(@user.inspect)。如果您从中获得任何见解,我会很好奇。
    • 哦,伙计们准备好,否则你的想法会被吹走。您通常应该将记录器代码放在控制器中,因为应用程序的大部分逻辑都应该存在于其中。
    • 我的想法还没有被打破,但我想通了!几乎,我可以通过用户名关注用户,但是当我尝试取消关注时,我得到了这个...Unknown key: follower_id app/models/user.rb:34:in unfollow app/controllers/users_controller.rb:21:in buddies
    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2018-10-17
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多