1

長年の読者初めてのユーザー。私は最初のRoRアプリケーションをまとめており、アプリが使用する必要のあるものをすべて分離しました。

  • ソーサリー
  • Omniauth
  • カンカン
  • twitter-bootstrap(sassに変換)

シンプルなフォーム。

清潔で、明確で、シンプルです....そうではありません。

私の人生では、「remember_me」フィールドでエラーが発生することなく、単純なフォームをSorceryの「ログイン」と統合することはできません(最も単純なタスクのように思われます)。

単純なフォームには、simple_form_tag(simple_form_forのみ)オプションがありません。これは、セッションコントローラーの新しいメソッドからのログインフォームで最適に機能します。代わりに、そのメソッドで@userインスタンスを作成する必要がありますが、「remember_me」フィールド「undefinedmethod`remember_me」でエラーが発生します。

どんな助けでも大歓迎です。

私は大いに意味します!事前に大いに感謝します:)

sessions/new.html.erb

<% provide :title, "Log in" %>
<h1>Log in</h1>
<%= simple_form_for @user, :html => { :class => 'form-horizontal' } do |f| %>
  <fieldset>
    <legend>Login</legend>

    <%= f.input :email, input_html: { :maxlength => 100 } %>
    <%= f.input :password, input_html: { :maxlength => 20 } %>
    <%= f.input :remember_me, as: :boolean %>


    <div class="form-actions">
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to 'Cancel', users_path, :class => 'btn' %>
    </div>
  </fieldset>
<% end %>

    class SessionsController < ApplicationController
  def new
    @user = User.new
  end
4

2 に答える 2

1

ドキュメントには次のように記載されています。

form_tag(url_for_options = {}, options = {}, &block)
Starts a form tag that points the action to an url configured with url_for_options just 
like ActionController::Base#url_for. The method for the form defaults to POST.

これはform_tag、コントローラ アクションによって処理される別の URL にデータを直接送信することを意図していることを示します。実際、RailsTutorial サインイン フォームでは、Michael Hartl は のform_for代わりに関数を使用していますform_tag

form_for(:session, url: sessions_path)

基本的には、データベースに書き込むのではなく、何らかの方法でコントローラーによって処理されるデータを送信するという考え方です。ユーザー セッションのモデルがないため、:session代わりにシンボルを使用し@sessionて、フォームにデータの POST 先 (URL) を指定する必要があります。

よくわかりませんが、これsimple_form_forでもうまくいくはずです。何かのようなもの:

<%= simple_form_for(:session, url: sessions_path) do |f| %>

更新:新しいユーザー セッションの作成に使用するサンプル アプリの参照実装を正常に変更しました。simple_form_for

これはもちろん、Sessions コントローラがログインを処理し、POST に応答するメソッド (おそらくcreate) を持っていることを前提としています。そのコントローラー アクションは、Sorcery ログインを処理する必要がある場所です。

興味のある方は、Rails のドキュメントを参照しform_forてください。

于 2012-03-22T12:50:59.407 に答える
0

私もこれをやろうとしていて、行き詰まっています。これは機能するはずですが、ログインフォームを送信するとエラーが発生します。私のフォームは次のようになります。

<h1>Log in</h1>

<%= simple_form_for(:session, url: sessions_path) do |f| %>

    <%= f.error_notification %>

    <%= f.input :email %>
    <%= f.input :password %>
    <%= f.input :remember_me, :as => :boolean %>

    <div class="form-actions">
    <%= f.submit "Login", :class => 'btn btn-primary' %>
    </div>
<% end %>

<%= link_to 'Forgot Password?', new_password_reset_path %>

これを機能させる方法がわからない。私のデバッグ出力は、フォームが正しいデータを送信しようとしていることを示しています:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
authenticity_token: wGdDEmG91p7RHzWZKLGgMQvKD+XupS1Z557vNDDG6GM=
session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  email: lee@example.com
  password: test
  remember_me: '1'
commit: Login
action: create
controller: sessions

また、コンソールに次のエラーが表示されます。

gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms)

しかし、私はresources :sessions自分のroutes.rbファイルに持っています。

于 2012-09-16T19:55:28.813 に答える