Ruby on rails 创建只有特定用户才能看到的表单。

Ruby on rails 创建只有特定用户才能看到的表单。,ruby-on-rails,ruby,forms,private,Ruby On Rails,Ruby,Forms,Private,我对RubyonRails比较陌生,但这不是我的第一个项目。我正在尝试创建一个活动管理网站,主办方可以在该网站上登录,并在表格中填写用户信息和电子邮件地址。然后,用户会收到一封电子邮件,允许他们支付最终到期的任何费用。我正在使用Desive cancan和rolify,并设置了3个角色 基本上,我不确定如何将表格私有化,这样只有党员才能看到表格并支付金额 任何帮助都将不胜感激。CanCan的作者Ryan Bates——如果你是Rails的新手,这是你花过的最好的9美元:-)我敢肯定,如果没有Ra

我对RubyonRails比较陌生,但这不是我的第一个项目。我正在尝试创建一个活动管理网站,主办方可以在该网站上登录,并在表格中填写用户信息和电子邮件地址。然后,用户会收到一封电子邮件,允许他们支付最终到期的任何费用。我正在使用Desive cancan和rolify,并设置了3个角色

基本上,我不确定如何将表格私有化,这样只有党员才能看到表格并支付金额


任何帮助都将不胜感激。

CanCan的作者Ryan Bates——如果你是Rails的新手,这是你花过的最好的9美元:-)我敢肯定,如果没有Railscasts,Rails将不复存在:-)

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


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

您可以这样做:

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
class PartyController
CanCan的主要功能是,您可以在单个类中隐藏所有授权代码,其中包括
CanCan::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
此代码将确保只有成员才能管理(:更新、:创建、:销毁)参与方。因此,即使页面上的表单对每个人都可见,如果非成员提交表单,控制器也会返回错误

但当然,您希望得到更好的结果,因此在特定视图中,您可以添加一个复选框:

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


其中,
@party
是您要编辑的特定实例。

@Matt是的,你说得对,我的错——我更新了答案。虽然我认为屏幕广播很棒,但这里的教程可能太多了。我并不太担心事情的付款方面,我试图做的是排序,可能会有多个组织者和多个事件发生,但与某个事件相关的人将只能看到那份人员名单。这是我所需要的理论让我明白!!!谢谢你到目前为止的评论