1

我对 ruby​​ on rails 比较陌生,但这不是我的第一个项目。我正在尝试创建一个活动管理网站,组织者可以在其中登录并使用用户信息和电子邮件地址填充表单。然后,用户会收到一封电子邮件,允许他们支付最后到期的任何费用。我正在使用 devise cancan 和 rolify 并设置了 3 个角色。

基本上我不确定如何将表格设为私有,因此只有聚会中的成员才能看到表格并支付金额。

任何帮助将不胜感激。

4

3 回答 3

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
于 2012-11-29T15:17:36.907 回答
1

CanCan 的作者 Ryan Bates 有几个优秀的 RailsCasts 授权——如果你对 Rails 比较陌生,这是你花的最好的 9 美元 :-) 我很确定如果没有 Railscasts,Rails 将不再存在 :-)

也许还可以看到我在下面添加的评论中的链接。

更新:删除了使用 CanCan 的建议,因为我错过了 OP 已经在使用它。

于 2012-11-29T15:14:08.017 回答
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) 一个派对。因此,即使页面上的表单对所有人可见,如果非成员提交,控制器也会返回错误。

但是,当然,您想要比这更好,因此在特定视图中您可以添加检查:

<% if can? :manage, @party %>
  <%= form_for @party do |f| %>
    <!-- your form here -->
  <% end %>
<% end %>

@party您要编辑的特定实例在哪里。

于 2012-12-04T19:20:46.877 回答