我对rails上的ruby相对较新,但这不是我的第一个项目。我正在尝试创建一个活动管理网站,组织者可以登录并填写包含用户信息和电子邮件地址的表单。然后,用户会收到一封电子邮件,允许他们支付最后到期的任何费用。我正在使用设计cancan和rolify并设置3个角色。
基本上我不确定如何将表单设为私有,因此只有包含在聚会中的成员才能看到表单并支付金额。
任何帮助将不胜感激。
答案 0 :(得分:2)
你可以这样做:
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
答案 1 :(得分:1)
CanCan的作者Ryan Bates有several excellent RailsCasts on authorization - 如果你对Rails相对较新,那么你将花费最多9美元:-)我很确定如果没有Railscasts,Rails将不复存在: - )
也许还会看到我在下面添加的评论中的链接。
更新:删除了使用CanCan的建议,因为我错过了OP已经在使用它。
答案 2 :(得分:0)
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)一个Party。因此,即使页面上的表单对每个人都可见,如果非成员提交它,控制器也会返回错误。
但是,当然,你想要更好,所以在特定的视图中你可以添加一个支票:
<% if can? :manage, @party %>
<%= form_for @party do |f| %>
<!-- your form here -->
<% end %>
<% end %>
@party
是您要编辑的特定实例。