【问题标题】:I need to send a request and accept like instagram follow and accept in rails [closed]我需要像 instagram 一样发送请求并接受,并在 rails 中接受并接受 [关闭]
【发布时间】:2019-08-29 18:22:08
【问题描述】:

我创建了一个在 Michael Hartl rails 教程中指定的 Web 应用程序。因为追随者直接追随任何人。我需要根据请求升级它并接受。首选解决方案的任何链接或解决方案的步骤。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您可以生成一个名为Request 的模型,您将在其中处理用户之间的连接,并让您控制发送请求的用户以及接收请求的用户。您可以拥有accepted_atdeclined_at 之类的字段。

    例如,User A 可以向User B 发送关注请求。如果User B 接受了请求,您可以向User A 发送通知,并在User AUser B 之间建立连接。

    在模型中你可以有类似的东西:

    class Request < ApplicationRecord
      belongs_to :sender, class_name: "User", foreign_key: "sender_id" (or some other name like follower)
      belongs_to :sending, class_name: "User", foreign_key: "sending_id" (or some other name like following)
    end
    

    在你的表单中,你可以有这样的东西:

    <%= form_with model: @request, method: :put, local: true do |form| %>
      <%= form.hidden_field :accepted_at, value: Time.now, type: "hidden" %>
      <%= form.submit "Accept" %>
    <% end %>
    
    <%= form_with model: @request, method: :put, local: true do |form| %>
      <%= form.hidden_field :declined_at, value: Time.now, type: "hidden" %>
      <%= form.submit "Decline" %>
    <% end %>
    
    

    在控制器中,你可以有

    def create
      @request = Request.new(request_params)
    
      if @request.save
          flash[:notice] = "Follow invitation sent!"
          redirect_to followers_path
      else
         flash[:alert] = "Errors. Couldn't send follow request"
         render view_name
      end
    end
    
    def update
      @request = Request.find(params[:id])
    
      @request.assign_attributes(request_params)
    
      if @request.accepted_at_changed?
       [here make the connection between users]
       flash[:notice] = "You've accepted the follow request"
      end
    
      if @request.declined_at_changed?
       [do nothing, just update the declined_at field]
       flash[:notice] = "You've declined the follow request"
      end
    
      if @request.save
       redirect_to followers_path
      else
       redirect_to root_path, alert: 'Not updated follow request!'
      end
    end
    
    private
    
    def request_params
      params.require(:request).permit(:sender_id, :sending_id, :accepted_at, :declined_at)
    end
    

    我认为这会给你一个关于如何做的原始想法。如果您有任何问题,我很乐意为您提供帮助。

    快乐编码。

    【讨论】:

    • @request.accepted_at_changed 模型的来源
    • 如何显示请求用户列表?
    • 你在哪里学的
    • 对于@request.accepted_at_changed?,你可以在这里阅读更多:api.rubyonrails.org/classes/ActiveModel/…,你也可以在这里查看:stackoverflow.com/a/5051147/11883546
    • 为了显示用户的待处理请求,您可以创建一个模型方法来找到它们。然后你可以通过它们循环像pending_requests.where(accepted_at: nil, declined_at: nil)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多