【问题标题】:NoMethodError in RevisersController#new "undefined method `build' for nil:NilClass"RevisersController 中的 NoMethodError#new “nil:NilClass 的未定义方法‘build’”
【发布时间】:2016-05-15 18:50:59
【问题描述】:

我希望用户有能力成为修订者!因此,如果他们填写表格成为修订者,他们可以获得成为修订者的功能!我有一个has_one reviseruser 链接到 routes.rb 中的resource reviser。 我收到这个错误!与我的修订者有关的事情可能会从我在线阅读的内容中返回 null,但我不知道如何在我的修订者控制器中的 def new 中不使其为 null。

修订者控制器:

class RevisersController < ApplicationController

before_action :set_reviser, only: [:show, :edit, :update]
before_action :authenticate_user!, except: [:show]

  def index
    @reviser = current_user.reviser
  end

  def show

  end

  def new
    @reviser = current_user.reviser.build
    @user = User.find(params[:user_id])
  end

  def create
    @reviser = current_user.reviser.build(reviser_params)

    if @reviser.save
      redirect_to @reviser,notice: "saved...."
    else 
      render :new
    end
  end

  def edit
    set_reviser
  end

  def update
    set_reviser
    if @reviser.update(reviser_params)
      redirect_to @reviser,notice: "updated.."
    else
      render :edit
    end
  end

private 
def set_reviser
  @reviser = Reviser.find(params[:id])
end

  def reviser_params
    params.require(:reviser).permit(:description, :average_start, :average_end, :max_pages, :price_per, :active)
end
end

new.html:

<div class="panel panel-default">
	<div class="panel-heading">
	Create your reviser profile information
	</div>
	<div class="panel-body">
		<div class="container">

		<%= form_for @reviser do |f| %>

		<div class="row">
			<div class="div.col-md-4 select">
			<div class="form-group">
				<label>dsd</label>
				<%= f.input :description, label: false, class: 'controls',:input_html =>{:id => 'description'} %>
			</div>
				
			</div> 
		</div>
             <%= f.submit "Become Adviser", class: "btn btn-large btn-primary" %>
		<% end %>
		</div>
	</div>
</div>

错误报告:

`在 2016-05-16 03:48:18 +0900 开始为 127.0.0.1 获取“/users/16/reviser/new” 由 RevisersController#new 处理为 HTML 参数:{"user_id"=>"16"} 用户负载 (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 16]] 修订者加载(0.1 毫秒) SELECT "revisers".* FROM "revisers" WHERE "revisers"."user_id" = ?限制 1 [["user_id", 16]] 在 2 毫秒内完成 500 内部服务器错误(ActiveRecord:0.2 毫秒)

NoMethodError(未定义方法build' for nil:NilClass): app/controllers/revisers_controller.rb:15:innew'

`

【问题讨论】:

    标签: html ruby-on-rails ruby methods controller


    【解决方案1】:

    构建的语法是:current_user.build_reviser(params[:reviser])

    【讨论】:

    • 好吧,这已经过去了,但现在我得到了undefined method revisers_path: 我应该在build_reviser({}) 中放什么?谢谢!!
    • build_reviser(params[:reviser])
    • 哦!你会想要&lt;%= form_for(current_user, @reviser) do |f| %&gt; - 因为修订者嵌套在用户内部!
    • 这是您遇到的路由错误。您需要在 form_for、redirect_to 等中包含路由的所有相关部分。在这种情况下,您的路由是 users/:user_id/revisers,因此无论您创建路由或路径,都需要该 user_id。
    • 是的,所以我输入了用户的 ID,所以我的网址看起来像 localhost:3000/users/16/reviser/new
    猜你喜欢
    • 2013-11-14
    • 2013-01-14
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多