我在我的用户文件夹(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
答案 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 %>