2016-08-20 4 views
0

「アクティブレコード」が正しい用語であるかどうかは不明です。 DB? Postgres?アクティブレコードの項目が正しくレンダリングされない - Rails 4.2

私はRails Tutorialをフォローしており、非常に不満な問題があります。私は人々が苦労しているので、あまりにもいくつかの投稿を見つけましたが、それらの大部分は答えの根拠から外れてしまったので、私の例で何が間違っているかを調べようとしています。

マイユーザコントローラ

クラスがUserController < 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 %> 

私は、Usersページ(6または7をロードする場合私の場合)この形式で出力されている「何か」が見えていますが、 wing 私はアクティブレコード(?)のインデックスが気に入っていますか?私はユーザーの最初の(または任意の)Micropostを表示する方法を知りません。

いくつかのソリューションでは、render @ user.micropostを使用している人がいましたが、私はパーシャル(私がよく知っている)に関する問題を抱えていますが、これまで使用していた構文電子メール)を使用して解決します。だから私はそれを複雑にしていると感じている?

答えて

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

あなたがノー・メソッドかnilクラスを取得した場合は、表示ページをレンダリングできません。

あなたのshowアクションには、@userというインスタンス変数がありません。

showでデータを表示するには、ユーザーオブジェクトが必要です。あなたの場合、あなたは誰も持っていません。

だからあなたのショー方法では、これを追加します。

をuser.find_by @(のparams [:ID])、ユーザ6または7を見つけて、あなたが

@呼び出すことができます

ブラウザからURLを貼り付けて、実際にどこにいるか確認できますか?

関連する問題