2014-06-13 2 views
1

나는 'Authlogic'보석을 사용하여 간단한 login_app을 만들려고 그리고 난이 오류가있어 :루비는

NameError in UsersController#create 
undefined local variable or method `users' for #<UsersController:0x0000000354ba48> 

Extracted source (around line #28): 

코드 :

def create 
    @user = User.new(params users) # <- this line 
    respond_to do |format| 
    if @user.save 

Rails.root : /home/ameex/projects/login_app

Application Trace | Framework Trace | Full Trace 
app/controllers/users_controller.rb:28:in `create' 

이 문제를 해결하는 데 도움을주세요.

+3

에게 제공? '@user = User.new (users_params)' – Pavan

답변

2

Rails4을 사용하는 경우이 방법이 유용합니다.

class UsersController < ApplicationController 

    def create 
    @user = User.new(user_params) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     else 
     format.html { render action: "new" } 
     end 
    end 
    end 

private 

    def user_params 
    params.require(:user).permit(:your_user_attr1,:your_user_attr2,..) 
    end 
end 

다음 Guides에서 Strong Parameters에서보세요. 당신이 가지고 Pavan의 대답을 백업하려면

1

오류이이었다에서

UsersController#create undefined local variable or method `users' for #

이것은 일반적인 문제이며, 기본적으로 존재하지 않는 로컬 객체를 참조했습니다 의미합니다 (케이스 users). 문제는 지금이 전화를하려고하는 것은, 레일 예외

에지도를 찾을 수 있다는 것입니다 - Pavan 지적

으로

에 Params, 당신이 가지고있는 문제는 당신이다 전화 :

@user = User.create(params users) 

여기서 설명하는 것과 같이 존재하지 않는 개체를 호출하는 것이 문제입니다. 하지만 훨씬 더 중요한 것은 실제 구문이 잘못되었다는 것입니다. 당신은 레일 내부에 두 개의 변수와 혼동지고있어 : 당신이 Rails 4에서 새 개체를 만들 때

, 당신은 당신이 새로운 기록을 채우는하고자하는 값을 PARAMS ActiveRecord 말할 필요가있다. 이것은 현재 본질적으로 레일의 데이터/객체를 참조 할 때 결론 인 params 해시

의 다른 회원을 화이트리스트하는 strong_params를 사용하여 수행됩니다, 당신은 사전에이를 사용할 수 있어야합니다. params users 참조도 관련 params[:key][:value] 귀하의 참조,도 아니다 당신의 strong_params 방법

는 희망이 당신을 좀 더 아이디어는`Rails4`를 사용하고

+1

당신의 설명은 대단합니다. 아마도 내 대답보다 나은 대답 일 것입니다. 나의 대답은 그 설명이 부족합니다. – Pavan