用户中的ArgumentError#pagename - 表单中的第一个参数不能包含nil或为空

时间:2016-02-18 06:02:19

标签: ruby-on-rails ruby ruby-on-rails-4

我在我的用户文件夹(Get-Help Rename-Item -Parameter * | Where-Object pipelineInput -like 'true*' | Select-Object Name, Aliases, Type, pipelineInput )下创建了一个新页面,因为其中的内容需要用户数据。我正在创建一个表单/下拉菜单,由于某些原因,在输入以下代码后,我抛出了这个错误:

mypage.html.erb

我不知道为什么,因为我知道undefined local variable or method `user' for #<#<Class:0x000000021aee18>:0x007fc52025c8e8> <%= form_for(@user) do |f| %>` `<%= user.firstname %>` `<%= user.lastname %>` 被定义了。我创建了许多表单,并在其他自定义页面上提取了其他用户数据。

参见代码:

mypage.html.erb

@user

user.rb

<div id="widepage">
  <div class="blue-text-header">Title</div>
  <div class="grey-text-subheader">Subtitle</div>
  <div class="infoheaders">Information</div>

  <%= form_for @user do |f| %>
    <%= f.collection_select :questions, User::QUESTIONS, :to_s, :to_s, 
        :include_blank => true
    %>
    <%= f.submit "Create" %>
  <% end %>
</div>

<div class="fullcard">
  <div class="name">
    <%= user.firstname %> <%= user.lastname %>
  </div>
</div>

users_controller.rb

class User < ActiveRecord::Base
  def self.search(search)
    where("firstname LIKE ? OR lastname LIKE ?", "%#{search}%", "%#{search}%")
  end

  QUESTIONS = ['hot', 'medium', 'cold']

  has_secure_password

  validates_length_of :password, :in => 6..20, :on => :create
  validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }

  has_attached_file :avatar,
    :path => ":rails_root/public/system/:attachment/:id/:basename_:style.:extension",
    :url => "/system/:attachment/:id/:basename_:style.:extension",
    :styles => {
      :thumb    => ['150x150#',  :jpg, :quality => 100],
      :preview  => ['175x175#',  :jpg, :quality => 70],
      :large    => ['600>',      :jpg, :quality => 70],
      :retina   => ['1200>',     :jpg, :quality => 30]
    },
    :convert_options => {
      :thumb    => '-set colorspace sRGB -strip',
      :preview  => '-set colorspace sRGB -strip',
      :large    => '-set colorspace sRGB -strip',
      :retina   => '-set colorspace sRGB -strip -sharpen 0x0.5'
    }

  validates_attachment :avatar,
    :presence => true,
    :size => { :in => 0..10.megabytes },
    :content_type => { :content_type => /^image\/(jpeg|png|gif|tiff)$/ }
end

5 个答案:

答案 0 :(得分:0)

确保在动作和控制器中初始化@user变量

@user = User.new(params)

答案 1 :(得分:0)

如果您的mypage操作位于用户控制器中,请先初始化用户对象。

def mypage
  @user = User.new()
end

您应该先将对象初始化,然后再将其发送到表单中。

@user = User.new()

答案 2 :(得分:0)

在控制器中添加此方法

def mypage
  @user = User.new
end

答案 3 :(得分:0)

应为<%= @user.firstname %> <%= @user.lastname %>

答案 4 :(得分:0)

@user是一个实例变量(ivar)。虽然user没有@符号是局部变量。

当学习Rails时,这可能会非常混乱,因为Rails会将控制器中定义的任何实例变量传递给所谓的view_context。这个view_context是一个对象,其中rails填充所有实例变量和辅助方法。视图中的view_context为self

所以当你这样做时:

def mypage
  @user = User.new
end

Rails会为您的视图提供实例var @user

<%= form_for(@user) do |f| %>
  <%# ... %>
  <%= @user.firstname %><%= @user.lastname %>
<% end %>

如果要创建表单或部分不知道(ivar)命名的部分,可以使用的另一个很酷的技巧是在表单构建器实例上使用.object

<%= form_for(@user) do |f| %>
  <%# ... %>
  <%= f.object.firstname %><%= f.object.lastname %>
<% end %>