在视图中显示关联模型的属性

时间:2013-04-07 12:27:10

标签: ruby-on-rails ruby associations rails-activerecord

我想获取在博客应用程序中创建文章的用户的用户名或电子邮件(都在用户表中)。目前,我可以从articles_controller.rb

获取用户ID
def create
  @article = Article.new(params[:article])
  @article.user_id = current_user.id
  @article.save
  redirect_to article_path(@article)
end

但不知道如何获取用户名或电子邮件。基本上我想在文章索引页面上显示用户名或电子邮件。请建议我如何完成它

user.rb

class User < ActiveRecord::Base
    has_many :articles
    has_many :comments
  # 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 :username, :email, :password, :password_confirmation, :remember_me
   attr_accessible :title, :body
end

article.rb

class Article < ActiveRecord::Base
   attr_accessible :title, :body
   has_many :comments
   belongs_to :user
end

articles_controller.rb

class ArticlesController < ApplicationController
    def index
        @articles = Article.all
    end

    def show
      @article = Article.find(params[:id])
    end

    def new
      @article = Article.new
    end

    def create
      @article = Article.new(params[:article])
      @article.user_id = current_user.id
      @article.save
      redirect_to article_path(@article)
    end

    def destroy
      @article = Article.find(params[:id])
      @article.destroy
      redirect_to action:  'index'  
    end

    def edit
      @article = Article.find(params[:id])
    end

    def update
      @article = Article.find(params[:id])
      @article.update_attributes(params[:article])
      flash.notice = "Article '#{@article.title}' Updated!"
      redirect_to article_path(@article)
     end
end

文章/ index.html.erb

 <div style="color:#666666; margin-top:10px"> <%= article.created_at %></div>
     <div style="color:#666666; margin-top:10px"> <%= article.user_id %></div>

文章表

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
      t.text  :body 
      t.timestamps
    end
    add_index :articles, [:user_id, :created_at]
  end
end

我可以在视图中获取用户ID,但不知道如何使用用户名或电子邮件。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您已使用userArticle模型类中定义了belongs_to :user关联。这会在user上创建一个Article方法,以便您在视图中返回关联的用户:

<%= article.user.email %>

将输出相关用户的电子邮件,或者:

<%= article.user.email if article.user %>

以满足nil用户值。或者写一个帮助器来将这个逻辑从视图中分解出来。

答案 1 :(得分:0)

你已经设定了文章和文章之间的关系。用户模型。因此,在您的文章索引页面中,您拥有@articles变量中的所有文章。很容易就可以使用下面的代码

来获取特定文章的特定用户
@articles.each do |article|
  user = article.user #gives the user of this current article. From this  
                      #objecct you can easily get the username, email or everything specific to user.
  email = user.email  #gives email of article's user or you can directly give artile.user.email
end

这样你就可以获得用户的所有属性。