2016-08-20 74 views
0

不太确定“活动记录”是否合适。数据库? Postgres的?活动记录中的项目不能正确渲染 - Rails 4.2

我通过Rails Tutorial并有一个非常令人沮丧的问题。我发现很多人在挣扎,但他们大多数都是为了找到答案,所以我试图找出我的例子有什么问题。

我的用户控制器

类UsersController <的ApplicationController before_action:set_user,只有:[:显示,编辑,:更新:摧毁]

# GET /users 
    # GET /users.json 
    def index 
    @users = User.all 
    end 

    # GET /users/1 
    # GET /users/1.json 
    def show 
    end 

    # GET /users/new 
    def new 
    @user = User.new 
    end 

    # GET /users/1/edit 
    def edit 
    end 

    # POST /users 
    # POST /users.json 
    def create 
    @user = User.new(user_params) 

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

    # PATCH/PUT /users/1 
    # PATCH/PUT /users/1.json 
    def update 
    respond_to do |format| 
     if @user.update(user_params) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /users/1 
    # DELETE /users/1.json 
    def destroy 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:name, :email) 
    end 
end 

我的用户模型

class User < ApplicationRecord 
    has_many :micropost 
    validates :name, presence: true 
    validates :email, presence: true 

end 

我的微柱模型

class Micropost < ApplicationRecord 
    belongs_to :user 
    validates :content, length: { maximum: 140 }, 
         presence: true 
end 

我的微柱控制器

class MicropostsController < ApplicationController 
    before_action :set_micropost, only: [:show, :edit, :update, :destroy] 

    # GET /microposts 
    # GET /microposts.json 
    def index 
    @microposts = Micropost.all 
    end 

    # GET /microposts/1 
    # GET /microposts/1.json 
    def show 
    end 

    # GET /microposts/new 
    def new 
    @micropost = Micropost.new 
    end 

    # GET /microposts/1/edit 
    def edit 
    end 

    # POST /microposts 
    # POST /microposts.json 
    def create 
    @micropost = Micropost.new(micropost_params) 

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

    # PATCH/PUT /microposts/1 
    # PATCH/PUT /microposts/1.json 
    def update 
    respond_to do |format| 
     if @micropost.update(micropost_params) 
     format.html { redirect_to @micropost, notice: 'Micropost was successfully updated.' } 
     format.json { render :show, status: :ok, location: @micropost } 
     else 
     format.html { render :edit } 
     format.json { render json: @micropost.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /microposts/1 
    # DELETE /microposts/1.json 
    def destroy 
    @micropost.destroy 
    respond_to do |format| 
     format.html { redirect_to microposts_url, notice: 'Micropost was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_micropost 
     @micropost = Micropost.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def micropost_params 
     params.require(:micropost).permit(:content, :user_id) 
    end 
end 

我show.html.erb

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Name:</strong> 
    <%= @user.name %> 
</p> 

<p> 
    <strong>Email:</strong> 
    <%= @user.email %> 
    <% if @user.micropost.any? %> 
    <%= @user.micropost.first %> 
    <% end %> 
</p> 

<%= link_to 'Edit', edit_user_path(@user) %> | 
<%= link_to 'Back', users_path %> 

当我加载在用户页面(6或7我的情况)我看到'东西'以这种格式输出,但它是笑翅膀 我觉得这是一个活动记录(?)索引?我不确定如何让它显示用户的第一个(或任何)Micropost。

在一些解决方案中,我看到人们使用render @ user.micropost,但我得到一个关于partials的问题(我很熟悉),但是教程说你应该能够使用以前使用的语法(又名@user。电子邮件)来解决它。所以我觉得我过于复杂了?

回答

0

我的问题是我需要使用

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Name:</strong> 
    <%= @user.name %> 
</p> 

<p> 
    <strong>Email:</strong> 
    <%= @user.email %> 
    <% if @user.micropost.any? %> 
    <%= @user.micropost.first.content %> 
    <% end %> 
</p> 

<%= link_to 'Edit', edit_user_path(@user) 

%> | 
<%= link_to 'Back', users_path %> 

,当它被报告的散列值我应该意识到。

0

你不能渲染显示页面,因为如果你确实会得到一个no方法或无类。

您的show动作没有名为@user的实例变量。

为了让您的节目显示数据,您需要一个用户对象。你的情况你没有。

所以在你的表演方法,补充一点:

@ user.find_by(PARAMS [:编号])

这将找到用户6或7,并允许你叫@

你能否从浏览器粘贴网址,以便我可以看到你的实际位置?