我对 ruby on rails 比较陌生,但这不是我的第一个项目。我正在尝试创建一个活动管理网站,组织者可以在其中登录并使用用户信息和电子邮件地址填充表单。然后,用户会收到一封电子邮件,允许他们支付最后到期的任何费用。我正在使用 devise cancan 和 rolify 并设置了 3 个角色。
基本上我不确定如何将表格设为私有,因此只有聚会中的成员才能看到表格并支付金额。
任何帮助将不胜感激。
我对 ruby on rails 比较陌生,但这不是我的第一个项目。我正在尝试创建一个活动管理网站,组织者可以在其中登录并使用用户信息和电子邮件地址填充表单。然后,用户会收到一封电子邮件,允许他们支付最后到期的任何费用。我正在使用 devise cancan 和 rolify 并设置了 3 个角色。
基本上我不确定如何将表格设为私有,因此只有聚会中的成员才能看到表格并支付金额。
任何帮助将不胜感激。
你可以这样做:
class PartyController < ApplicationController
def view_payment_form
unless current_user.has_role?(:member, Party.find(params[:id]))
flash[:error] = "You are not a member"
redirect :back
else
# do what ever is needed to display form
end
end
end
CanCan 的作者 Ryan Bates 有几个优秀的 RailsCasts 授权——如果你对 Rails 比较陌生,这是你花的最好的 9 美元 :-) 我很确定如果没有 Railscasts,Rails 将不再存在 :-)
也许还可以看到我在下面添加的评论中的链接。
更新:删除了使用 CanCan 的建议,因为我错过了 OP 已经在使用它。
CanCan 的主要特点是可以将所有授权码隐藏在单个类中,其中包括 CanCan::Ability
类。在最简单的情况下,您只需调用该类Ability
。
如果您已经使用 CanCan,您就会知道在该类中定义了initialize
方法。在您的情况下,它可能看起来像这样:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
can :manage, :party do |party|
party.members.include? user
end
can :read, :all
end
end
这段代码已经确保只有一个成员可以管理 (:update, :create, :destroy) 一个派对。因此,即使页面上的表单对所有人可见,如果非成员提交,控制器也会返回错误。
但是,当然,您想要比这更好,因此在特定视图中您可以添加检查:
<% if can? :manage, @party %>
<%= form_for @party do |f| %>
<!-- your form here -->
<% end %>
<% end %>
@party
您要编辑的特定实例在哪里。