【发布时间】:2019-08-29 18:22:08
【问题描述】:
我创建了一个在 Michael Hartl rails 教程中指定的 Web 应用程序。因为追随者直接追随任何人。我需要根据请求升级它并接受。首选解决方案的任何链接或解决方案的步骤。
【问题讨论】:
标签: ruby-on-rails ruby
我创建了一个在 Michael Hartl rails 教程中指定的 Web 应用程序。因为追随者直接追随任何人。我需要根据请求升级它并接受。首选解决方案的任何链接或解决方案的步骤。
【问题讨论】:
标签: ruby-on-rails ruby
您可以生成一个名为Request 的模型,您将在其中处理用户之间的连接,并让您控制发送请求的用户以及接收请求的用户。您可以拥有accepted_at 和declined_at 之类的字段。
例如,User A 可以向User B 发送关注请求。如果User B 接受了请求,您可以向User A 发送通知,并在User A 和User 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
我认为这会给你一个关于如何做的原始想法。如果您有任何问题,我很乐意为您提供帮助。
快乐编码。
【讨论】:
pending_requests.where(accepted_at: nil, declined_at: nil)