Ruby on rails RubyonRails教程,由M.Hartl编写。第10.2.1章-未定义的局部变量或“micropost'”方法;
我在第10.2.1章-未定义的局部变量或方法“micropost”中不断得到以下错误。我正在尝试在显示页面上呈现所有帖子 这是我的用户控制器:Ruby on rails RubyonRails教程,由M.Hartl编写。第10.2.1章-未定义的局部变量或“micropost'”方法;,ruby-on-rails,Ruby On Rails,我在第10.2.1章-未定义的局部变量或方法“micropost”中不断得到以下错误。我正在尝试在显示页面上呈现所有帖子 这是我的用户控制器: class UsersController < ApplicationController before_filter :signed_in_user, only: [:index, :edit, :update, :show, :destroy] before_filter :correct_user, only: [:e
class UsersController < ApplicationController
before_filter :signed_in_user, only: [:index, :edit, :update, :show, :destroy]
before_filter :correct_user, only: [:edit, :update]
before_filter :admin_user, [:destroy]
def index
#@users = User.all
@users = User.paginate(page: params[:page])
end
def new
@user = User.new
end
def destroy
@user = User.find(params[:id]).destroy
flash[:success] = "User has been deleted!"
redirect_to users_path
end
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
#good!
sign_in @user
flash[:success] = "Profile"
redirect_to user_path(@user)
else
render 'edit'
end
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Ruby app!"
redirect_to user_path(@user)
else
render 'new'
end
end
private
def signed_in_user
if !signed_in?
store_location
flash[:error] = "Please sign in!"
redirect_to signin_url
end
end
def correct_user
@user = User.find(params[:id])
if !current_user?(@user)
redirect_to '/'
end
end
def admin_user
if current_user.admin?
#nothing
else
redirect_to '/'
end
end
end
class UsersController
这是我的看法
<% provide(:title, @user.name) %>
<div class="row">
<aside class="span4">
<section>
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
</section>
</aside>
<div class="span8">
<% if @user.microposts.any? %>
<h3>Microposts (<%= @user.microposts.count %>)</h3>
<ol class="microposts">
<li>
<span class="content"><%= micropost.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(micropost.created_at) %> ago.
</span>
</li>
</ol>
<%= will_paginate @microposts %>
<% end %>
</div>
</div>
微孔()
五年前发的。
以下是micropost模型:
# == Schema Information
#
# Table name: microposts
#
# id :integer not null, primary key
# content :string(255)
# user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class Micropost < ActiveRecord::Base
attr_accessible :content
belongs_to :user
validates :content, presence: true, length: { maximum: 140 }
validates :user_id, presence: true
default_scope order: 'microposts.created_at DESC'
end
#==架构信息
#
#表名:MicroPost
#
#id:整数不为空,主键
#内容:字符串(255)
#用户id:integer
#创建时间:datetime非空
#更新时间:datetime非空
#
类Micropost
最后,这里是用户模型:
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# password_digest :string(255)
# remember_token :string(255)
# admin :boolean default(FALSE)
#
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_many :microposts, dependent: :destroy
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, presence: true, length: { minimum: 6 }
validates :password_confirmation, presence: true
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
#==架构信息
#
#表名:用户
#
#id:整数不为空,主键
#名称:字符串(255)
#电子邮件:string(255)
#创建时间:datetime非空
#更新时间:datetime非空
#密码摘要:字符串(255)
#记住\u标记:字符串(255)
#管理员:布尔默认值(FALSE)
#
类用户
请让我知道,如果你想让我张贴更多的代码。谢谢 在您看来,我看到有时您将micropost称为:
micropost.content
在其他情况下,作为类属性:
@micropost
您应该对此进行检查。您的视图似乎缺少一条线,该线通过用户的微操循环显示它们。添加行:
<% @microposts.each do |micropost| %>
现在,行
中的局部变量micropost
将存在。在您的视图中,您没有循环@user。micropost
,请尝试以下操作:
<% if @user.microposts.any? %>
<h3>Microposts (<%= @user.microposts.count %>)</h3>
<ol class="microposts">
<% @user.microposts.each do |micropost| %>
<li>
<span class="content"><%= micropost.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(micropost.created_at) %> ago.
</span>
</li>
<% end %>
</ol>
<%= will_paginate @microposts %>
<% end %>
微孔()
五年前发的。
如果您想直接使用局部变量(micropost),就像micropost.content一样,那么您必须创建一个部分(html.erb)文件,并在视图中使用render方法调用该文件