首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nil:NilClass的未定义方法‘[]’

nil:NilClass的未定义方法‘[]’
EN

Stack Overflow用户
提问于 2014-05-11 11:29:10
回答 2查看 103关注 0票数 0

这很奇怪。但我的联络表格出故障了。我已经实现了许多这样的表单,这违背了我为什么要在这一行上获得undefined method '[]' for nil:NilClass的理由。

代码语言:javascript
复制
<%= form_for(@inquiry, :html => {:"data-validate" => 'parsley'}) do |f| %>

这里是风景;

代码语言:javascript
复制
        <%= form_for(@inquiry, :html => {:"data-validate" => 'parsley'}) do |f| %>          
            <%= f.hidden_field :nickname, :as => :hidden, :input_html => {:value => ""}  %>
            <div class="block clearfix" >
                <%= f.label :name, "Name", class: "col-sm-2 control-label no-padding-right" %>
                <div class="col-xs-10">
                    <%= f.text_field :name, class: 'col-xs-12' %>
                </div>
            </div><!--//form-group-->
            <div class="space-4"></div> 
            <div class="block clearfix" >
                <%= f.label :email, "Email", class: 'col-sm-2 control-label no-padding-right' %>
                <div class="col-xs-10">
                    <%= f.text_field :email, class: 'col-xs-12' %>
                </div>
            </div><!--//form-group-->  
            <div class="space-4"></div>         
             <div class="block clearfix">                   
                <%= f.label :subject, "Subject",class: "col-sm-2 control-label no-padding-right" %>        
                <div class="col-xs-10">
                    <%= f.text_field :subject, class: "col-xs-12"   %>  
                </div> 
            </div><!--//form-group--> 
            <div class="space-4"></div>                             
             <div class="block clearfix">                   
                <%= f.label :message, "Message",class: "col-sm-2 control-label no-padding-right" %>                    
                <div class="col-xs-10">
                    <%= f.text_area :message, class: "col-xs-12", :"parsley-maxlength"=>"1000"  %>
                </div>
            </div><!--//form-group-->                                                           
            <%= f.hidden_field :check  %>                   
            <div class="form-actions clearfix">
                <%= f.submit  "Send", class: "btn btn-primary col-xs-12" %> 
            </div>    
        <% end %>

和控制器;

代码语言:javascript
复制
  def new
    @inquiry = Inquiry.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @inquiry }
    end
  end


  # POST /inquiries
  # POST /inquiries.json
  def create
    @inquiry = Inquiry.new(params[:inquiry])

    respond_to do |format|
      if @inquiry.deliver
        format.html { redirect_to @inquiry, notice: 'We will be in touch as soon as possible. Thank you!' }
        format.json { render json: @inquiry, status: :created, location: @inquiry }
      else
        format.html { render action: "new" }
        format.json { render json: @inquiry.errors, status: :unprocessable_entity }
      end
    end
  end

以及模型;

代码语言:javascript
复制
class Inquiry < ActiveRecord::Base
  # attr_accessible :title, :body
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations
  include ActionView::Helpers::TextHelper


  attr_accessor :name, :email, :phone_number, :message, :nickname, :subject, :check

  validates :name, presence: true

  validates :email, presence: true, format: { with: /\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/ }

  validates :message, presence: true, length: { minimum: 10, maximum: 1000 }

  validates :nickname,  format: { with: /^$/ }

  validates :subject, presence: true, length: {maximum: 25}

  validates :check, presence: false

  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

  def deliver
    ContactUs.contact_us(name, email, subject, message).deliver
  end

  def persisted?
    false
  end  
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-11 12:46:24

通过变更,解决了联络表格问题;

代码语言:javascript
复制
<%= form_for(@inquiry, :html => {:"data-validate" => 'parsley'}) do |f| %>

代码语言:javascript
复制
<%= form_for :inquiry, url: inquiries_path, :html => {:"data-validate" => 'parsley'} do |f| %>

并将控制器改为;

代码语言:javascript
复制
class InquiriesController < ApplicationController

  def new
    @inquiry = Inquiry.new
  end

  def create
    @inquiry = Inquiry.new(params[:inquiry])

    if @inquiry.deliver
      flash[:notice] = "Your inquiry has been sent and we will be in touch as soon as possible. Thank you!"
      redirect_to action: :new
    else
      flash[:notice] = "Your inquiry has not been sent Thank you!"
      render :new
    end
  end

end

非常感谢。

票数 0
EN

Stack Overflow用户

发布于 2014-05-11 11:34:57

试试这个:-

代码语言:javascript
复制
<%= form_for @inquiry, :html => {:data-validate => 'parsley'} do |f| %>
OR
<%= form_for @inquiry, :html => {:"data-validate" => 'parsley'} do |f| %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23592020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档