問題タブ [cancan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
746 参照

ruby-on-rails-3 - Rails3でCancan認証をテストする際のSQLite3エラー:そのようなテーブルはありません:abilities:DELETE FROM "abilities" WHERE 1 = 1

Cancan( http://github.com/ryanb/cancan )を使用してRails3beta4でデフォルトのテストを実行すると問題が発生します。テストは、次のようなプレーンなバニラ自動生成テストです。

「真実」をテストし、真の目的を主張します

すべてのテスト(ユニットと機能の両方)で、次のエラーが発生します。

ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:そのようなテーブルはありません:abilities:DELETE FROM "abilities" WHERE 1 = 1

これは、使用法と能力がtest_helpers.rbで定義されている場合でも発生します

これは、Cancanが承認に使用するAbilityモデル(単なるRubyクラス)が原因であり、DBにテーブルがないためだと思います。おそらく、何かがテスト後に能力を破壊しようとしていて、データベースから能力を誤って削除しようとしているのでしょうか?どうすればこれを確認できますか(さらに重要なことに、修正できますか)?

繰り返しになりますが、テストにはカスタムロジックはありません。これらは、Rails3beta4によって生成されたものです。

(FYIAbilityクラスはActiveRecord:: Baseを継承せず、CanCan :: Abilityを含みます。また、アプリ(承認およびすべて)は正常に機能します。)

環境:-ruby 1.8.7-p249 --rails 3.0.0.beta4-cancan 1.2.0 --devise 1.1.rc2

他の誰かがこの問題に遭遇しますか?

ご協力いただきありがとうございます !

更新:PostgreSQLに切り替えてみました。明らかに、エラーはDBに依存しません:「raketest」の実行時に次のエラーが発生しました

ActiveRecord :: StatementInvalid:PGError:ERROR:リレーション「abilities」が存在しません行1:DELETE FROM "abilities" ^:DELETE FROM "abilities"

0 投票する
1 に答える
1077 参照

ruby-on-rails - Rails - キャッシングと許可ベースのビュー

CanCan を使用して、ユーザーのアクセス許可を確認し、ユーザーに対して条件付きでページ コンテンツを表示または非表示にします。ただし、ページをキャッシュしたいのですが、フラグメントキャッシュを使用してもエレガントな解決策が見つかりません...たとえば:

確かに私は一人ではありません。これを行う良い方法があります。ここで一般的にベストプラクティスと考えられているものは何ですか?

ご意見をお寄せいただきありがとうございます。

0 投票する
1 に答える
1240 参照

ruby-on-rails - Collection_Selectデフォルト値が設定されていません

Railsアプリケーションのプロファイルの編集ビューで使用しているcollection_selectに奇妙な問題があります。データベースは正しい値で更新されていますが、ユーザーがプロファイルを編集しようとしたときに、選択ボックスのデフォルト値が選択されていません。:include_blank => trueまたは:prompt=>trueのどちらも機能しません。

これがコードです

ビューの編集:

_player_form部分的:

生成されたHTML:

承認にcancanを使用しているため、cancanは自動的に初期化されるため、コントローラーに空の編集アクションがあります

その行を追加して編集しようとしましたが、何の影響もありません。また、この問題の非常に奇妙な点は、編集フォームの部分的な他のすべてのフィールドに、データベースからの正しい現在の値が入力されていることです。さらに、UsersテーブルにはCoursesテーブルの外部キーであるcourse_id列があり、コンソールで関連付けを確認したところ、正しいcourse_idが返されます。私が持っているので、関連付けは適切に設定されています。したがって、collection_selectの構文に問題があると思いますが、それが何であるかはわかりません。

助けていただければ幸いです。

ありがとう。

0 投票する
3 に答える
3412 参照

ruby-on-rails - ブロックを使用して CanCan でアビリティを定義すると例外が発生する

Ryan Bate の CanCan gem を使用して能力を定義していますが、いくつかの基本機能が失敗しています。Product モデルと Products コントローラーがあり、インデックス アクションは次のようになります。

accessible_byメソッドで製品を取得しようとするとエラーが発生します。次のエラーが発生します。

私の能力クラスは次のようになります。

これは非常に単純な例のように見えるので、これが失敗していることに驚いており、何か単純なことを見落としているのではないかと思います (つまり、コードを長時間見つめているなど)。

もう少し調べて、簡単なテストを実行しました。以下のコードを見ると、1 つの例は正常に動作し、1 つの例は実際にはまったく同じことを行うべきところで失敗しています。

したがって、問題は CanCan がこれらのブロックを処理する方法にあるようです。私はライブラリを深く掘り下げて、エラーが発生した場所を見つけました-CanCanの能力クラス定義で:

そこで、このonly_block?方法とは何かを調べてみました。このメソッドは、can 定義にブロックが含まれていても意味をなさない条件がない場合に true を返します。これは、ブロックの要点は、次の構文では複雑すぎる場合にブロック内の条件を定義することであるためです。

この問題に関する洞察は素晴らしいでしょう!CanCan github ページにも問題を提出しましたが、ライブラリを捨てる必要があるかもしれないところまで来ています。ただし、多くの人が CanCan をうまく使用していることを理解しています。これは非常に基本的な機能であり、何か間違ったことをしているに違いないと思います。特に、3 日前に git リポジトリが更新され、Ryan Bates が README で Rails 3 のサポートについて言及しているためです。

ありがとう!

0 投票する
1 に答える
677 参照

ruby-on-rails - devise+はインデックス問題へのアクセスをブロックできませんwherer@proj= Proj.all

DeviseとCanCanを使用するアプリがあります。config>initializers>Abiliity.rbクラスのAbilityincludeCanCan :: Ability

プロジェクトコントローラーのインデックスアクションに問題があります。プロジェクトコントローラーは通常のストックRESTfulコントローラーです。基本的に、通常のユーザーであるユーザーは、ログインすると、projects#indexを表示できます。しかし、すべてのプロジェクトでこのユーザーが「通常のユーザー」であるとは限りません。なぜ彼のアクセスをブロックできないのでしょうか。

ありがとう

0 投票する
1 に答える
1686 参照

ruby-on-rails - Rails 3、ユーザーの InstanceID に基づいてアプリ全体のすべてのクエリ結果を制限する CanCan

2 つのテーブルがあります ユーザー (名前、電子メール、パスワード、instance_id など) 例: james bond、james@abc.com、1 インスタンス (id、ドメイン) 例: 1、abc.com

アプリケーション全体を通して、ジェームズ・ボンドが自分のインスタンスに割り当てられたデータのみを確認できるようにしたい = 1

したがって、(name, desc, instance_id) を含む book テーブルがある場合、彼は自分のインスタンスの本しか見ることができません。

CanCanがこれを行う方法であると言われていますが、上記のように何かをグローバルに設定する方法がわかりません。管理者、モデレーターなどの役割に基づいているようです...必要になりますが、上記のデータルールよりも低いレベル。

考え?

0 投票する
0 に答える
721 参照

ruby-on-rails - Rails: CanCan 承認を忘れるキュウリ

cancan パーミッションが正しく設定されていることを確認するためにいくつかのキュウリ テストを作成しようとしていますが、奇妙な問題が発生しています。

次のコードでログインすると、カピバラは期待どおりにログインしたと言います。ただし、特定のログインが必要なリソースに移動すると、CanCan の「許可されていません」というメッセージが表示されます。Capybara は、まったく同じ「アクセス拒否」ページに「ロール superadmin で testsuperadmin としてログイン」(目的のロール) を出力します。

キュウリ/カピバラではなく手動で同じページにアクセスすると、承認が付与され、すべてが正常に機能します。認証はデバイスによって処理されます。

シナリオの上に @allow-rescue を追加しようとしましたが、ActionController::Base.allow_rescue = true を features/support/env.rb に追加しようとしましたが、どちらも効果がありませんでした。

助言がありますか?これは本当に私を困惑させます。

乾杯...

0 投票する
1 に答える
347 参照

ruby-on-rails - ユーザー<>プロジェクトベースの役割

現在、(Roles_Users) テーブルを使用してロールを持つユーザーを作成できる Devise & CanCan を使用しています。

それはいいことですが、私が欲しいのは、アプリにプロジェクトを持ち、ユーザーが (管理者、ビューアーなど) IE のような役割を持つ可能性のあるプロジェクトごとに、役割はユーザーに割り当てられるのではなく、どのプロジェクトに基づいてユーザーに割り当てられるかです。のメンバーです。

例:

  • ユーザー X は、管理者ロールを持つプロジェクト A に属しています
  • ユーザー X は、ゲスト ロールを持つプロジェクト B に属しています
  • ユーザー Y はオブザーバー ロールを持つプロジェクト B に属しています

これにはどのようなモデルが適していますか?

モデル

ユーザー has_many: プロジェクト プロジェクト ? 役割?

Users_Roles_Projects (user_id、project_id、role_id)

どう思いますか?私は初心者であり、あなたの素晴らしい経験豊富な人々からの理解と考えを利用することができます. ありがとう!

0 投票する
1 に答える
1971 参照

ruby-on-rails - CanCan問題によるRails認証

Rails アプリでは、AuthLogic と CanCan を実装しました。ただし、ユーザーが CanCan を使用して記事を管理できるかどうか (article.user_id を介して所有者であるかどうかを確認) を把握しようとすると、問題が発生します。これは簡単なはずですが、何が間違っているのかわかりません。

ユーザー has_many の記事

/articles/index に移動すると、次のエラーが表示されます

これが私の見解です:

これが私のコントローラーです:

0 投票する
1 に答える
287 参照

ruby-on-rails - Ruby/Rails のこの行は何をしますか?

Ruby/Rails の次の行について説明してもらえますか?

アプリに合わせて、次のように更新しました。

それは失敗しましたが、次のように更新しました:

そして、それは意図したとおりに機能します。何故ですか?