неопределенная локальная переменная или метод `request ' - PullRequest
2 голосов
/ 11 января 2011

Моя рубиновая версия 1.9.1.это первый проект в ruby, который я пытаюсь разработать.я получаю сообщение об ошибке «NameError (неопределенная локальная переменная или метод request' for #<User:0x3ab7220>): app/models/user.rb:36:in login» app / controllers / user_controller.rb: 7: в `signup '"

, когда я пытаюсь ввести некоторые данные и сохранить записиВот класс контроллеров

class UserController < ApplicationController   
  def signup 
    if request.post? and params[:user]
      @user = User.new(params[:user])
      if @user.save
        session[:user] = @user
        flash[:notice] = "User #(@user.login) created !"
        redirect_to :action =>"home"
      else
        flash[:error]="Signup unsuccessful"
        @user.clear_password!
      end
    end
  end

  def home
    @title = "Bookshelf - User Home" 
  end

Мой signup.html

<div id="signup_content">
<span class="title">Sign-up for a BookShelf account...</span>
<% form_for :user, @user, :url => {:action => "signup" } do |f| %>  
    <%= error_messages_for 'user' %><br/>

    <div class="signup_field">
        <label for="user_login">Login:</label>
        <%= f.text_field :login %><br/>
      </div>

    <div class="signup_field">
        <label for="user_first_name">First Name:</label>
        <%= f.text_field :first_name %><br/>
    </div>

    <div class="signup_field">
        <label for="user_password_confirmation">Password Confirmation:</label>
        <%= f.password_field :password_confirmation %>
    </div>

    <%= submit_tag "Signup" %>
<% end %>

application.html

<html>
  <head>
    <title><%= @title %></title>
    <%= stylesheet_link_tag "style" %>
    <%= javascript_include_tag :defaults %>
  </head>
  <body>
    <div id="header">
        <div id ="logo_image">
            <%= link_to image_tag('main_logo.png'), 
            :controller=>'home', :action=>'index' %>
        </div>

        <% if !session[:user] %>
            <%= render :partial=>"user/signin" %>
        <% else %>  
            <div id ="user_menu"><%= link_to 'Logout',:controller=>'user',:action=>'logout'%>
            </div>
        <% end %>
        <div style="clear: both;height:0px;"></div>
    </div>          
    <%= render :partial=> "shared/sidebar" %>
    <div id="Content">
        <% if flash[:notice] -%>
        <div id="notice"><%= flash[:notice] %></div>
        <% end -%>
        <% if flash[:error] -%>
        <div id="error"><%= flash[:error] %></div>
        <% end -%>
        <!-- <%= yield %> uncommenting solved the double rendering problem-->                       
    </div>
  </body>
</html>

1 Ответ

3 голосов
/ 11 января 2011

Как отметили комментаторы, ваша ошибка в user.rb.Вы пытаетесь получить доступ к методу request вашего контроллера, но не можете, потому что в этот момент вы находитесь в классе User.Обычно слой модели (в данном случае User) ничего не должен знать о других ваших слоях (слоях контроллера и вида).Контроллер предназначен для обработки вещей, связанных с запросом и ответом.Вы можете прочитать о MVC в Rails или MVC в целом .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...