【问题标题】:Rails select query displaying all columns with odd formatting in viewRails 选择查询在视图中显示所有具有奇怪格式的列
【发布时间】:2013-02-20 13:02:56
【问题描述】:

我是 Rails 新手,我遇到了我的第一堵墙。到目前为止,我已经能够使用谷歌来寻找答案。老实说,我认为部分问题在于我无法正确解释问题。

show.html.erb 文件中的我的 Rails Select 查询是 (1) 显示重复记录和 (2) 以奇怪的格式而不是纯文本显示数据。我将下面的所有代码粘贴到完整的说明中。

我有一个用户模型 has_many :works

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :works_attributes
  # attr_accessible :title, :body

  validates_presence_of :first_name, :last_name
  validates_uniqueness_of :first_name, :last_name, :email, :case_sensitive => false

  has_many :works
  accepts_nested_attributes_for :works

这是我的工作模型,属于_to用户

class Work < ActiveRecord::Base
  attr_accessible :description, :work_name, :users_id

  belongs_to :user
end

这是用户控制器:

class UsersController < ApplicationController
  def index
    @users = User.all

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @users }
end


end
  def show
    @user = User.find(params[:id])
    @works = @user.works.all
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @user }
    end
  end
end

在我的用户 show.html.erb 视图中,我想循环浏览属于特定用户的作品。我使用 user_id 字段设置外键关系以遵循 Rails 约定。当循环找到属于用户的作品时,我想显示 work_name 字段。

<% if @user.works.any? %>
                    <% @user.works.each do |user| %>
                   <%= @user.works(:select => 'work_name') %>
                  <% end %>
                <% end %>

但是,这是我在查看 /users/1/ 时在网站上看到的输出:

[#<Work id: 1, work_name: "WorkTest1", description: "I am the co-founder and CEO of WorkTest1, a website t...", created_at: "2013-02-12 00:33:19", updated_at: "2013-02-12 00:33:19", user_id: 1>, #<Work id: 2, work_name: "WorkTest2", description: "test", created_at: "2013-02-12 00:33:19", updated_at: "2013-02-12 00:33:19", user_id: 1>] [#<Work id: 1, work_name: "WorkTest1", description: "I am the co-founder and CEO of WorkTest1, a website t...", created_at: "2013-02-12 00:33:19", updated_at: "2013-02-12 00:33:19", user_id: 1>, #<Work id: 2, work_name: "WorkTest2", description: "test", created_at: "2013-02-12 00:33:19", updated_at: "2013-02-12 00:33:19", user_id: 1>]

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2


    【解决方案1】:

    您的 .each 循环不是遍历用户而是遍历工作对象。

    你应该能够做到:

    <% @user.works.each do |work| %>
      <%= work.work_name %>
    <% end %>
    

    此外,由于您在控制器操作中定义 @work,您可以将其简化为:

    <% @works.each do |work| %>
      <%= work.work_name %>
    <% end %>
    

    您已经拥有可供使用的工作对象。我认为没有任何理由尝试选择其他任何内容。

    【讨论】:

    • 这很完美!太感谢了。跟进问题,所以我理解这 100%。这个简化的约定也适用于视图中的 If 语句,对吗?我改变了 到 和数据输出好像是一样的。
    • 是的,在你的场景中 @user.works@works 是一回事。
    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多