【问题标题】:How is `↳` generated in development.logsdevelopment.logs中的`↳`是如何产生的
【发布时间】:2019-01-27 00:35:46
【问题描述】:

我已经按照 Hartl 的教程制作了一个带有标记系统的 ToDoList,还借助了 word guidevideo。但是,我并不真正了解标记系统在过滤方面是如何工作的,所以我只是复制它并即兴发挥。我仍在处理当前的bug

我目前正在比较我自己的代码生成的日志和我在教程中使用的代码,两者都是通过单击标签来过滤掉任务。似乎教程中的代码在每个加载请求之间都有一个,我很想知道它是如何生成的。任何人都可以启发我吗?如果需要更多信息,请通知我。

教程日志

Started GET "/tags/Humour" for 127.0.0.1 at 2019-01-27 08:17:13 +0800
Processing by TasksController#index as HTML
  Parameters: {"tag"=>"Humour"}
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/application_controller.rb:5
  Tag Load (0.1ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."name" = ? LIMIT ?  [["name", "Humour"], ["LIMIT", 1]]
  ↳ app/models/task.rb:6
  Rendering tasks/index.html.erb within layouts/application
  Task Load (0.2ms)  SELECT "tasks".* FROM "tasks" INNER JOIN "taggings" ON "tasks"."id" = "taggings"."task_id" WHERE "taggings"."tag_id" = ?  [["tag_id", 4]]
  ↳ app/views/tasks/index.html.erb:9
  Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."task_id" = ?  [["task_id", 1]]
  ↳ app/views/tasks/index.html.erb:12
  Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."task_id" = ?  [["task_id", 3]]
  ↳ app/views/tasks/index.html.erb:12
  Rendered tasks/index.html.erb within layouts/application (4.6ms)
Completed 200 OK in 71ms (Views: 67.2ms | ActiveRecord: 0.6ms)

我自己的代码

Started GET "/tags/tag2" for 127.0.0.1 at 2019-01-27 08:21:35 +0800
Processing by MicropostsController#index as HTML
  Parameters: {"tag"=>"tag2"}
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]
  Tag Load (0.1ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."name" = ? LIMIT ?  [["name", "tag2"], ["LIMIT", 1]]
  Rendering microposts/index.html.erb within layouts/application
  Micropost Load (0.2ms)  SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? ORDER BY "microposts"."created_at" DESC  [["user_id", 2]]
  Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."micropost_id" = ?  [["micropost_id", 20]]
  Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."micropost_id" = ?  [["micropost_id", 14]]
  Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."micropost_id" = ?  [["micropost_id", 8]]
  Tag Load (0.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."micropost_id" = ?  [["micropost_id", 2]]
  Rendered microposts/index.html.erb within layouts/application (8.3ms)
  Rendered layouts/_rails_default.html.erb (82.3ms)
  Rendered layouts/_shim.html.erb (0.2ms)
  Rendered layouts/_header.html.erb (0.7ms)
  Rendered layouts/_footer.html.erb (1.5ms)
Completed 200 OK in 1095ms (Views: 1024.4ms | ActiveRecord: 6.1ms)

这是我的控制器代码:

微帖子控制器

class MicropostsController < ApplicationController
  before_action :logged_in_user, only: [:index, :show, :create, :destroy]
  before_action :correct_user,   only: :destroy


  def index
    @microposts = current_user.microposts
    @microposts = @microposts.tagged_with(params[:tag]) if params[:tag]
  end


  def show
    @micropost = Micropost.find(params[:id])
  end


  def create
    @micropost = current_user.microposts.build(micropost_params)
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to root_url
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

  def destroy
    @micropost.destroy
    flash[:success] = "You have deleted a task!"
    redirect_to request.referrer || root_url
  end

  private

    def micropost_params
      params.require(:micropost).permit(:content, :tag_list, :tag, 
        {tag_ids: [] }, :tag_ids)
    end

    def correct_user
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to root_url if @micropost.nil?
    end
end

会话控制器

class SessionsController < ApplicationController

  def new
  end

  def create
    @user = User.find_by(email: params[:session][:email].downcase)
    if (@user && @user.authenticate(params[:session][:password]))
      log_in @user
      flash[:success] = "Welcome back, #{@user.name}!"
      params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
      redirect_back_or root_path
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def destroy
    log_out if logged_in?
    redirect_to root_url
  end
end

静态页面控制器

class StaticPagesController < ApplicationController
  def home
    if logged_in?
      @new_micropost = Micropost.new
      @feed_items = current_user.microposts.paginate(page: params[:page]) 
    end 
  end

  def help
  end

  def about
  end

  def contact
  end
end

用户控制器

class UsersController < ApplicationController
  before_action :logged_in_user, only: [:edit, :update, :destroy]
  before_action :correct_user,   only: [:edit, :update]
  before_action :admin_user,     only: [:destroy]


  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
  end

  def new
    @user = User.new
  end

  def index
    @users = User.paginate(page: params[:page])
  end


  def create
   @user = User.new(user_params)
   if @user.save
     log_in @user
     flash[:info] = "Welcome to the to-do app, #{@user.name}"
     redirect_to @user
   else
     render 'new'
   end
  end

  def admin
    @users = User.paginate(page: params[:page])
  end

  def destroy
    a = User.find(params[:id]).name
    User.find(params[:id]).destroy
    flash[:success] = "#{a} has been deleted!"
    redirect_to users_url
  end

  def admin_user
    redirect_to(root_url) unless current_user.admin?
  end

 def edit
   @user = User.find(params[:id])
 end

 def update
  @user = User.find(params[:id])
  if @user.update_attributes(user_params)
    flash[:success] = "Profile for @user.name has been updated"
    redirect_to(@user)
  else
    flash[:danger] = "Update Failed."
    render 'edit'
  end
end

  private
    def user_params
      params.require(:user).permit(:name, :email, :password,
                                  :password_confirmation, :admin)
    end
    def logged_in_user
      unless logged_in?
        store_location
        flash[:danger] = "You are not logged in. Please log in."
        redirect_to login_url
      end
    end

    def correct_user
      @user = User.find(params[:id])
      if !current_user?(@user)
        flash[:danger] = "You are not authorized to visit this page."
        redirect_to(root_url)
      end
    end
  end

微博/index.html.erb

<h1>Filtered Micropost Page</h1>
<div class = "col-md-8 offset-2">
  <% @microposts.each do |micropost| %>
    <p><%= truncate(micropost.content, length: 50) %></p>
    <p><small>Tags: <%= raw micropost.tags.map(&:name).map { |t| link_to t, tag_path(t) }.join(', ') %></small</p>
        <span class="timestamp">
            Posted <%= time_ago_in_words(micropost.created_at) %> ago.
            <% if current_user?(micropost.user) %>
              <%= link_to "Done", micropost_path(micropost), method: :delete, data: { confirm: "Keep up the good work!" } %>
            <% end %>
        </span>
    <% end %>
</div>

微博模型

class Micropost < ApplicationRecord
  belongs_to :user
  has_many :taggings
  has_many :tags, through: :taggings, :dependent => :delete_all
  default_scope -> { order(created_at: :desc) }
  validates :user_id, presence: true
  validates :content, presence: true, length: {maximum: 140 }
  attr_accessor :tag_list



  def self.tagged_with(name)
    Tag.find_by!(name: name).microposts
  end

  def self.tag_counts
    Tag.select('tags.*, count(taggings.tag_id) as count')
    .joins(:taggings).group('taggings.tag_id')
  end

  def tag_list
    tags.map(&:name).join(', ')
  end

  def tag_list=(names)
    self.tags = names.split(',').map do |n|
      Tag.where(name: n.strip).first_or_create!
    end
  end
end

Config/routes.rb 并运行 rake routes

Rails.application.routes.draw do
  resources :users
  resources :microposts          

  get    '/about',   to: 'static_pages#about'
  get    '/contact', to: 'static_pages#contact'
  get    '/signup',  to: 'users#new'
  post    '/signup',  to: 'users#create'
  get    '/login',    to: 'sessions#new'
  post   '/login',    to: 'sessions#create'
  delete '/logout',   to: 'sessions#destroy'
  get   '/users/admin',     to: 'users#admin'

  get 'tags/:tag', to: 'microposts#index', as: :tag

  root   'static_pages#home'
end

        Prefix Verb   URI Pattern                    Controller#Action
         users GET    /users(.:format)               users#index
               POST   /users(.:format)               users#create
      new_user GET    /users/new(.:format)           users#new
     edit_user GET    /users/:id/edit(.:format)      users#edit
          user GET    /users/:id(.:format)           users#show
               PATCH  /users/:id(.:format)           users#update
               PUT    /users/:id(.:format)           users#update
               DELETE /users/:id(.:format)           users#destroy
    microposts GET    /microposts(.:format)          microposts#index
               POST   /microposts(.:format)          microposts#create
 new_micropost GET    /microposts/new(.:format)      microposts#new
edit_micropost GET    /microposts/:id/edit(.:format) microposts#edit
     micropost GET    /microposts/:id(.:format)      microposts#show
               PATCH  /microposts/:id(.:format)      microposts#update
               PUT    /microposts/:id(.:format)      microposts#update
               DELETE /microposts/:id(.:format)      microposts#destroy
         about GET    /about(.:format)               static_pages#about
       contact GET    /contact(.:format)             static_pages#contact
        signup GET    /signup(.:format)              users#new
               POST   /signup(.:format)              users#create
         login GET    /login(.:format)               sessions#new
               POST   /login(.:format)               sessions#create
        logout DELETE /logout(.:format)              sessions#destroy
   users_admin GET    /users/admin(.:format)         users#admin
           tag GET    /tags/:tag(.:format)           microposts#index
          root GET    /                              static_pages#home

更新: 我正在使用 Rails 5.2.2。这些都在我的初始化程序/文件夹中。

application_controller_renderer.rb
assets.rb
backtrace_silencers.rb
cookies_serializer.rb
filter_parameter_logging.rb
inflections.rb
mime_types.rb
simple_form_bootstrap.rb
simple_form.rb
wrap_parameters.rb 

【问题讨论】:

  • 您使用的是什么 Rails 版本,您的 initializers/ 文件夹中有什么?
  • 我已经添加了我的initializers/文件夹的内容
  • 那么为什么在一种情况下生成而在另一种情况下没有生成呢?
  • 在“新鲜​​的”Rails 5.2.2 中,它还应该打印“query-trace”,这是调用进行 Active Record 查询的对象的代码位置。尝试使用新的 Rails 应用程序进行测试。

标签: ruby-on-rails ruby filtering url-routing


【解决方案1】:

这不仅仅是符号,这是查询源的显示 Rails Logger Source 如果您在 config/environments/development.rb 或 config.log_level = :debug 中没有任何 config.log_level,您应该会看到路径。 此配置也应该存在于您的环境配置中 config.active_record.verbose_query_logs = true

【讨论】:

  • 你的意思是在 config/environments/development.rb 中包含config.log_level = :debug,如果是这样,添加后我看不到任何更改。
  • 自从这个github.com/rails/rails/pull/26815合并后,功能就实现了。请告诉您的 rails -v 和 rails c - ActiveRecord::Base.logger.level (必须为 0 表示 :debug) 也许您在 debelopment.rb 配置中更改了 config.active_record.verbose_query_logs = true?
  • ActiveRecord::Base.logger.level 在我转到 rails c 时返回 0
  • 我建议的最后一个选项可能是 config.active_record.verbose_query_logs = false
  • 哦,我以前什至没有类似的东西,包括它并将标志更改为真正的作品。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 2011-05-11
  • 2014-12-09
  • 1970-01-01
相关资源
最近更新 更多