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

时间:2012-11-29 15:07:38

标签: ruby-on-rails ruby forms private

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

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

任何帮助将不胜感激。

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是您要编辑的特定实例。