1

私は Ruby on Rails に比較的慣れていませんが、これは私の最初のプロジェクトではありません。主催者がログインしてフォームにユーザー情報とメールアドレスを入力できるイベント管理 Web サイトを作成しようとしています。その後、ユーザーはメールを受け取り、最後に支払うべき料金を支払うことができます。私は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 は、いくつかの優れた RailsCast を承認済みです。Rails に比較的慣れていない場合、これは最高の $9 です。

以下に追加したコメントのリンクも参照してください。

更新: OP が既に使用していたことを見逃したため、CanCan を使用するというアドバイスを削除しました。

于 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 に答える