0

我试图在我的模式中获取由 simple-form 生成的表单,但是在加载页面时我一直遇到以下错误。

 undefined method 'model_name' for NilClass:Class

这是我用来尝试生成表单的简单代码

_header.html.erb(在 view_pages_controller 下)

<%= simple_form_for @update do |f| %>
  <%= f.input :lang %>
  <%= f.input :book %> #temp, just for testing simpform
  <%= f.button :submit %>
<% end %>

我很确定问题出在我的控制器代码上

更新控制器.rb

class UpdatesController < ApplicationController
before_filter :signed_in_user, only: [:create, :destroy]

  def create
    @update = current_user.updates.build(params[:update])
    if @update.save
      flash[:success] = "Update successful"
      redirect_to root_path
    else
      flash[:error] = "Failed to update, please try again"
      redirect_to root_path
    end
  end
end

更新.rb

class Update < ActiveRecord::Base
  attr_accessible :book, :user_id, :lang, :round_id

  belongs_to :user
end

任何帮助/提示将不胜感激。我知道我的代码很烂。

4

4 回答 4

1

问题是@update您认为它是空的。您应该明确呈现此视图的操作,并将 value 设置为@update。create 操作仅根据参数设置它,然后重定向到 root。

于 2012-08-27T07:58:15.827 回答
1

我相信您正在使用某种 RESTfull 控制器,并且您正在通过操作呈现表单:new。所以,为了解决你的麻烦,添加

@update = current_user.updates.build(params[:update])

对你的动作

于 2012-08-27T07:59:39.850 回答
0

您是否尝试过在控制器中声明@update 的行上方放置一个调试器。

然后您可以看到您的 current_user 对象以及使用类似 current_user.methods 的方法可以使用哪些方法

于 2012-08-27T09:06:29.477 回答
0

您是否包含resource:'updates' or resources:'updates'在 routes.rb 中。这可能会解决问题。

于 2012-08-27T09:59:25.983 回答