未定义的局部变量或方法`resource' for for Simple_Form

时间:2014-03-24 16:06:41

标签: ruby-on-rails devise simple-form

我有一个带有这两种方法的用户控制器

  def trial_signup
    @user = User.new 
  end 

  def trial_signup_submit
    @user = User.create(params[:user_attributes])
  end 

我的trial_signup.html.erb(simple_form)位于app / views / users

这是我表单的一部分

<%= simple_form_for(resource, :as => resource_name, :url => users_trial_signup_submit_path(resource_name)) do |f| %>

在我的路线中我添加了这些

  get 'users/trial_signup', to: 'users#trial_signup'
  post 'users/trial_signup_submit', to: 'users#trial_signup_submit'

我的表单已正确呈现,但未正确发布。我希望它发布到我刚刚创建的动作中。

我已经安装好了。我有另一个注册工作流程来注册用户,但这是一个试验注册,所以我需要找到另一种方式。

为什么表单无法找到我的用户模型资源?

1 个答案:

答案 0 :(得分:2)

<%= simple_form_for(@user, :url => users_trial_signup_submit_path(@user)) do |f| %>

您尝试在设计控制器之外渲染设计表单,因此您没有初始化resourceresource_name变量。

也可能需要更改控制器中的参数:

def trial_signup_submit
  @user = User.create(params[:user])
end

虽然我建议做类似的事情:

def trial_signup_submit
  @user = User.new(params[:user])
  if @user.save
    redirect_to <wherever you want>, notice: <your message>
  else
    render :trial_signup
  end
end

PS:如果您需要与默认设置new_trialcreate_trial不同的内容,我认为您应该将您的操作更改为newcreate