【问题标题】:undefined local variable or method `resource' for for Simple_FormSimple_Form 的未定义局部变量或方法“资源”
【发布时间】:2014-03-24 16:06:40
【问题描述】:

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

  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'

我的表单正在正确呈现,但它没有正确发布。我希望它发布到我刚刚创建的操作中。

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

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

【问题讨论】:

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


    【解决方案1】:
    <%= 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:如果您需要不同于默认值newcreate 的操作,我认为您应该将操作更改为new_trialcreate_trial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2018-04-19
      • 2015-01-01
      • 2013-12-17
      相关资源
      最近更新 更多