1

私はRoRを初めて使用します...警告します:)

このルートをroutes.rbで作成しました:

  scope :module => :mobile, :as => :mobile do
    constraints(:subdomain => /m/) do
      resources :home
         devise_for :users, :path => "", :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "signup" }, :controllers => {:sessions => "sidebar/sessions"}

      resources :disclosures # Will have new, get, look up a disclosure

      devise_for :users, :path => "", :path_names =>
          { :sign_in => "login", :sign_out => "logout", :sign_up => "signup" }
          # How do I tell is to also take care of the confirm account screen?
    end
  end

そして、この HAML ページを作成しました。

-content_for :primary_content do
  .content_container
    %strong{:class => "code", :id => "message"} Hello Alex!

  -content_for :primary_content do
    -if signed_in?
      =render "sidebar/common/primary_navigation"
    -else
      =render "devise/sessions/form"

ユーザーがログインしていない場合、次のエラーが表示されます。

undefined local variable or method `resource' for #<#<Class:0x147fe1990>:0x147fdab40>

1: = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:id => "login-form"}) do |f| 
2:   %fieldset.field-container
3:     = f.label(t :label_login) 
4:     .input

そしてこのスタックトレース:

app/views/devise/sessions/_form.html.haml:1:in `_app_views_devise_sessions__form_html_haml__2025707780_2630401320'
app/views/mobile/home/index.html.haml:26:in `_app_views_mobile_home_index_html_haml__2141491110_2759485880'
app/views/mobile/home/index.html.haml:22:in `_app_views_mobile_home_index_html_haml__2141491110_2759485880'
app/views/mobile/home/index.html.haml:1:in `_app_views_mobile_home_index_html_haml__2141491110_2759485880'
app/controllers/mobile/home_controller.rb:6:in `index'

したがって、私がそれを正しく理解していれば、コードのフォーム部分をどうするかわかりません。あれは正しいですか?この問題を引き起こすために何が間違っていましたか? どうすれば修正できますか?

ありがとうございました!!

4

1 に答える 1

3

デバイスフォームをレンダリングする必要はありません。

したがって、これを削除します:

-else
      =render "devise/sessions/form"

認証するコントローラーの先頭にこれを追加する必要があります。

before_filter :authenticate_user!, :only => [:edit, :update, :destroy]

これにより、ユーザーが認証されていない場合、devise はログイン フォームにリダイレクトされます。彼がすでに認証されている場合は、通常のビューがレンダリングされます。

于 2012-04-17T17:25:00.593 に答える