【问题标题】:undefined method `input' for "NoMethodError in Revisers#new "“Revisers#new 中的 NoMethodError”的未定义方法“输入”
【发布时间】:2016-09-11 18:55:35
【问题描述】:

我正在尝试使此表单正常工作。 RevisersUserhas_one 关系。

new.html:

<div class="container">

		<%= form_for @reviser, url: new_user_reviser_path(user_id: current_user.id) do |f| %>

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

错误日志:

Rendered revisers/_form.html.erb (30.8ms)
  Rendered revisers/new.html.erb within layouts/application (31.7ms)
Completed 500 Internal Server Error in 38ms (ActiveRecord: 0.3ms)

ActionView::Template::Error (undefined method `input' for #<ActionView::Helpers::FormBuilder:0x007faf35829f10>):
    11:             <div class="div.col-md-4 select">
    12:             <div class="form-group">
    13:                 <label>dsd</label>
    14:                 <%= f.input :description %>
    15:             </div>
    16:                 
    17:             </div> 
  app/views/revisers/_form.html.erb:14:in `block in _app_views_revisers__form_html_erb___2471522092853631188_70195247159960'
  app/views/revisers/_form.html.erb:8:in `_app_views_revisers__form_html_erb___2471522092853631188_70195247159960'
  app/views/revisers/new.html.erb:1:in `_app_views_revisers_new_html_erb___1451348464463745171_70195280947160'

reviserController:

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.build_reviser(params[:reviser])
    @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 = current_user.reviser
  end

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

【问题讨论】:

  • 问题是f.input 不是一个存在的方法。也许您的意思是f.text_field 或许多其他Rails form helpers 之一?
  • o 我看到我从简单的形式转移到了这种形式。所以我想没有输入法..哈哈我现在明白了。我什至没有检查我只是假设的原因。

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


【解决方案1】:

f.input 没有为默认的 Rails 表单助手定义。您可能对使用 f.input 的 Formtastic/SimpleForm 语法感到困惑。

如果您不使用 Simple Form 或 Formtastic,那么只需使用 Rails 提供的标准表单辅助方法即可:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

<%= f.text_field :description %>

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多