我是Rails的新手,我已经击中了我的第一面墙。到目前为止,我已经能够使用Google来获得答案。说实话,我认为部分问题在于我无法正确解释问题。
show.html.erb文件中的My Rails Select查询是(1)显示重复记录和(2)显示奇数格式而不是纯文本的数据。我将粘贴下面的所有代码以完全说明。
我有一个用户模型has_many:工作
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
这是我的工作模式,belongs_to user
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>]
答案 0 :(得分:0)
你的.each循环没有遍历用户而是循环工作对象。
你应该能够做到:
<% @user.works.each do |work| %>
<%= work.work_name %>
<% end %>
此外,由于您在控制器操作中定义了@work,因此可以将其缩减为:
<% @works.each do |work| %>
<%= work.work_name %>
<% end %>
您已经拥有了工作对象。我认为没有任何理由可以选择其他任何东西。