【问题标题】:Devise - Trying to display the user who made a post设计 - 尝试显示发帖的用户
【发布时间】:2013-03-17 14:39:11
【问题描述】:

我正在创建这个 Rails 应用程序, 在应用程序中,我可以创建帐户,然后发布状态。 我已经做到了,所以我可以在屏幕上显示状态,但是如何显示发帖人的姓名?我正在使用设计并已设置:用户名

我的观点

<% if user_signed_in? %>
  <h1 id="welcome" class="nuvo">Welcome <%= current_user.username %>!</h1>
<% else %>
  <h1 id="welcome" class="nuvo">Log-In to make some posts!</h1>
<% end%>

<div class="follow-row">
  <div class="titan-users nuvo"><h2>TITAN Users</h2></div>
</div>

<div class="statuses">
  <% if user_signed_in? %><div class="status-form"><%= render 'form' %></div><% end %>
  <% @posts.each do |post| %>
    <div class="post">
      <div class="tstamp"><strong>Posted <%= time_ago_in_words(post.created_at) %> ago by <%= current_user.username %></strong></div>
      <div class="status"><%= post.status %></div>
    </div>
  <% end %>
</div>

我的帖子控制器

class PostsController < ApplicationController
  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all(:order => "created_at DESC")
    @post = Post.new

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @posts }
    end
  end

  # GET /posts/1
  # GET /posts/1.json
  def show
    redirect_to posts_path
  end

  # GET /posts/new
  # GET /posts/new.json
  def new
    @post = Post.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @post }
    end
  end

  # GET /posts/1/edit
  def edit
    @post = Post.find(params[:id])
  end

  # POST /posts
  # POST /posts.json
  def create
    @post = Post.new(params[:post])

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render json: @post, status: :created, location: @post }
      else
        format.html { render action: "new" }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /posts/1
  # PUT /posts/1.json
  def update
    @post = Post.find(params[:id])

    respond_to do |format|
      if @post.update_attributes(params[:post])
        format.html { redirect_to @post, notice: 'Post was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /posts/1
  # DELETE /posts/1.json
  def destroy
    @post = Post.find(params[:id])
    @post.destroy

    respond_to do |format|
      format.html { redirect_to posts_url }
      format.json { head :no_content }
    end
  end
end

我的用户模型

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, :username

  has_many :post
  # attr_accessible :title, :body
end

我的帖子模型

class Post < ActiveRecord::Base
  attr_accessible :status, :author

  belongs_to :user

  validates :status, :presence => true
end

那么,有没有人知道如何在视图中显示“current_user.username”,而不是显示发布者的姓名?

所以,对于 CodeIt,这是我得到的错误

undefined method `username' for nil:NilClass
Extracted source (around line #17):

14:   <% if user_signed_in? %><div class="status-form"><%= render 'form' %></div><% end %>
15:   <% @posts.each do |post| %>
16:     <div class="post">
17:       <div class="tstamp"><strong>Posted <%= time_ago_in_words(post.created_at) %> ago by <%= post.user.username %></strong></div>
18:       <div class="status"><%= post.status %></div>
19:     </div>
20:   <% end %>
20:   <% end %>`

【问题讨论】:

    标签: ruby-on-rails post model devise controller


    【解决方案1】:

    您拥有post 属于user。所以你可以使用:

     post.user.username  #In your @posts loop
    

    【讨论】:

    • 试过了,只是说undefined method username' for nil:NilClass`
    • 您是否为帖子分配了用户?
    • @coreypizzle 这是因为当您创建帖子时,您需要为该帖子分配用户。
    • 对不起,我真的是 Rails 的新手,那么分配是什么意思?
    • 然后在PostsControllercreate方法中将@post = Post.new改成@post = current_user.posts.build(params[:post])
    【解决方案2】:

    在控制器中的 create 方法中,我没有看到您将 user_id 传递给它,因此可能是用户 dint 设置到 post 模型中。

    也许您可以在表单中放置一个 hidden_​​field_tag,并将您的 user_id 作为参数传递。 然后,在您的控制器中,执行类似的操作 @post.user_id = 参数[:user_id]

    然后,在您看来,您可以访问 user_id 并从 user_id 中找到用户名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多