Ruby on rails 未定义的方法`avatar';对于#<;用户::ActiveRecord \-关系:0x007fc328248ef0>;
我正在尝试显示按用户名或姓氏搜索的用户的数据。我能够显示为用户返回的所有数据(例如,如果按名字搜索用户,我可以提取与搜索用户相关的所有其他字段/数据,如城市、州/省等) 唯一似乎给我一个错误的字段是与每个用户相关联的化身(个人资料照片)字段<代码> 注意:我可以从其他用户页面(例如show.html.erb)显示此字段 我在点击搜索结果页面时遇到的错误是: 用户索引中的命名错误-未定义的方法“化身”# 用户::ActiveRecord\u关系:0x007fc328248ef0 \u user.html.erbRuby on rails 未定义的方法`avatar';对于#<;用户::ActiveRecord \-关系:0x007fc328248ef0>;,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在尝试显示按用户名或姓氏搜索的用户的数据。我能够显示为用户返回的所有数据(例如,如果按名字搜索用户,我可以提取与搜索用户相关的所有其他字段/数据,如城市、州/省等) 唯一似乎给我一个错误的字段是与每个用户相关联的化身(个人资料照片)字段 注意:我可以从其他用户页面(例如show.html.erb)显示此字段 我在点击搜索结果页面时遇到的错误是: 用户索引中的命名错误-未定义的方法“化身”# 用户::ActiveRecord\u关系:0x007fc328248ef0 \u user.html.
<div class="card">
<div class="columns">
<div class="col">
<%= image_tag @user.avatar.url(:thumb) %>
</div>
<div class="col">
<div class="name">
<%= user.firstname %> <%= user.lastname%>
</div>
<br>
<b><%= user.city%>, <%= user.stateprov%></b>
</div>
</div>
</div>
<% if @user.present? %>
<%= render @user %>
<% else %>
<p>There are no posts containing the term(s) <%= params[:search] %>.</p>
<% end %>
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
def index
@user = User.all
if params[:search]
@user = User.search(params[:search]).order("created_at DESC")
else
@user = User.all.order('created_at DESC')
end
end
def show
@user = User.find(params[:id])
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :aptno, :streetaddress, :city, :country, :stateprov, :poszip, :receive_newsletters, :terms_accepted, :password, :password_confirmation, :avatar)
end
end
,
index.html.erb
<div class="card">
<div class="columns">
<div class="col">
<%= image_tag @user.avatar.url(:thumb) %>
</div>
<div class="col">
<div class="name">
<%= user.firstname %> <%= user.lastname%>
</div>
<br>
<b><%= user.city%>, <%= user.stateprov%></b>
</div>
</div>
</div>
<% if @user.present? %>
<%= render @user %>
<% else %>
<p>There are no posts containing the term(s) <%= params[:search] %>.</p>
<% end %>
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
def index
@user = User.all
if params[:search]
@user = User.search(params[:search]).order("created_at DESC")
else
@user = User.all.order('created_at DESC')
end
end
def show
@user = User.find(params[:id])
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :aptno, :streetaddress, :city, :country, :stateprov, :poszip, :receive_newsletters, :terms_accepted, :password, :password_confirmation, :avatar)
end
end
没有包含该术语的帖子
user.rb
class User < ActiveRecord::Base
def self.search(search)
where("firstname LIKE ? OR lastname LIKE ?", "%#{search}%", "%#{search}%")
end
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 => ['175x175#', :jpg, :quality => 100],
:preview => ['480x480#', :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
class用户6..20,:on=>:create
验证:密码确认,状态:true,如果:->{new_record?| | changes[“password”]}
已经附上了文件:阿凡达,
:path=>“:rails\u root/public/system/:attachment/:id/:basename\u:style.:extension”,
:url=>“/system/:attachment/:id/:basename\ux:style.:extension”,
:样式=>{
:thumb=>175x175,:jpg,:quality=>100],
:preview=>['480x480#',:jpg,:quality=>70],
:large=>['600>,:jpg,:quality=>70],
:retina=>['1200>,:jpg,:quality=>30]
},
:convert_options=>{
:thumb=>'-set colorspace sRGB-strip',
:preview=>'-设置颜色空间sRGB-条带',
:large=>'-set colorspace sRGB-strip',
:retina=>'-设置颜色空间sRGB-条带-锐化0x0.5'
}
验证_附件:头像,
:presence=>true,
:size=>{:in=>0..10.MB},
:content_type=>{:content_type=>/^image\/(jpeg | png | gif | tiff)$/}
终止
用户\u控制器.rb
<div class="card">
<div class="columns">
<div class="col">
<%= image_tag @user.avatar.url(:thumb) %>
</div>
<div class="col">
<div class="name">
<%= user.firstname %> <%= user.lastname%>
</div>
<br>
<b><%= user.city%>, <%= user.stateprov%></b>
</div>
</div>
</div>
<% if @user.present? %>
<%= render @user %>
<% else %>
<p>There are no posts containing the term(s) <%= params[:search] %>.</p>
<% end %>
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
def index
@user = User.all
if params[:search]
@user = User.search(params[:search]).order("created_at DESC")
else
@user = User.all.order('created_at DESC')
end
end
def show
@user = User.find(params[:id])
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :aptno, :streetaddress, :city, :country, :stateprov, :poszip, :receive_newsletters, :terms_accepted, :password, :password_confirmation, :avatar)
end
end
class UsersController
您看到此错误是因为您在关系
对象上调用方法,而不是在用户
对象上调用方法。尝试调用。首先在关系对象上,它将返回一个User
对象。然后,您可以在该用户
对象上调用.avatar
看起来您正在将关系存储到users\u controller.rb的index
方法中的@user
def index
@user = User.all
if params[:search]
@user = User.search(params[:search]).order("created_at DESC")
else
@user = User.all.order('created_at DESC')
end
end
在这两种情况下,您都在调用.all
,这将返回一个关系。您可以使用User.where(条件:)。首先
获取实际的单一用户对象并将其保存到@User然而,正如max指出的,使用返回单个用户的索引方法是没有意义的。因此,您应该将此功能映射到另一个控制器方法 您看到此错误是因为您在关系
对象上调用方法,而不是在用户
对象上调用方法。尝试调用。首先在关系对象上,它将返回一个User
对象。然后,您可以在该用户
对象上调用.avatar
看起来您正在将关系存储到users\u controller.rb的index
方法中的@user
def index
@user = User.all
if params[:search]
@user = User.search(params[:search]).order("created_at DESC")
else
@user = User.all.order('created_at DESC')
end
end
在这两种情况下,您都在调用.all
,这将返回一个关系。您可以使用User.where(条件:)。首先
获取实际的单一用户对象并将其保存到@User然而,正如max指出的,使用返回单个用户的索引方法是没有意义的。因此,您应该将此功能映射到另一个控制器方法 您正在尝试将用户集合用作单个用户
def index
@users = User.all
if params[:search]
@users = User.search(params[:search]).order("created_at DESC")
else
@users = User.all.order('created_at DESC')
end
end
这里的区别在于,user
是一个局部变量,rails在渲染局部对象时会创建该变量。而@user
是您的命名收藏
所以只需使用局部变量:
<%= image_tag user.avatar.url(:thumb) %>
命名变量时要注意多重化。您试图将一组用户用作单个用户
def index
@users = User.all
if params[:search]
@users = User.search(params[:search]).order("created_at DESC")
else
@users = User.all.order('created_at DESC')
end
end
这里的区别在于,user
是一个局部变量,rails在渲染局部对象时会创建该变量。而@user
是您的命名收藏
所以只需使用局部变量:
<%= image_tag user.avatar.url(:thumb) %>
命名变量时要注意复数。User.all将返回一个集合,因此更适合命名为@users。您正在尝试调用集合上的实例方法。您需要迭代集合并在单个实例上调用avatar.User.all将返回一个集合,因此更合适