prawn-rails
gemを使用しようとしています。belongs_toモデルをループしようとしています
posty
メソッドを正しく処理していないので、私はそれをすべて間違っていると知っていますか?同じことが、私は
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# first_name :string
# last_name :string
# created_at :datetime not null
# updated_at :datetime not null
#
require 'elasticsearch/model'
class User < ActiveRecord::Base
searchkick word_start: [:user]
has_many :posts
validates :first_name, :last_name, presence: true
end
ポストモデルposty.pdf.prawn
ユーザーモデルで
# == Schema Information
#
# Table name: posts
#
# id :integer not null, primary key
# title :string
# body :string
# date :date
# user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class Post < ActiveRecord::Base
belongs_to :user
validates :title, :body, presence: true
validates :title, length: { maximum: 140 }
end
ルートを持っているもののために行く
resources :users do
resources :posts
end
prawn-railsの指示に従って、私はコントローラにメソッドを作成し、メソッドと同じ名前のビューを作成し、そのビューを記入することになっています。
投稿コントローラーのメソッド
def posty
@user = User.all
@post = @user.posts.find(params[:id])
end
posty.pdf.prawn
prawn_document do |pdf|
pdf.font_size 25
pdf.text 'List of Posts by User', :style => :bold
@post.each do |p|
pdf.font_size 16
pdf.text p.title
end
end
これがアップしますエラーです:(スクリーンショット)
のEDIT
ルート
users_test GET /users/test(.:format) users#test
posts_posty GET /posts/posty(.:format) posts#posty
root GET / users#index
search GET /search(.:format) search#search
user_posts GET /users/:user_id/posts(.:format) posts#index
POST /users/:user_id/posts(.:format) posts#create
new_user_post GET /users/:user_id/posts/new(.:format) posts#new
edit_user_post GET /users/:user_id/posts/:id/edit(.:format) posts#edit
user_post GET /users/:user_id/posts/:id(.:format) posts#show
PATCH /users/:user_id/posts/:id(.:format) posts#update
PUT /users/:user_id/posts/:id(.:format) posts#update
DELETE /users/:user_id/posts/:id(.:format) posts#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
EDIT 2
書き込みコントローラ
# == Schema Information
#
# Table name: posts
#
# id :integer not null, primary key
# title :string
# body :string
# date :date
# user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class PostsController < ApplicationController
def posty
@posts = User.find(params[:user_id]).posts
end
def new
@user = User.find(params[:user_id])
@post = @user.posts.new
end
def edit
@user = User.find(params[:user_id])
@post = @user.posts.find(params[:id])
render :edit
end
def create
@user = User.find(params[:user_id])
@post = @user.posts.new(post_params)
if @post.save
redirect_to user_path(@post.user)
else
render :new
end
end
def update
@user = User.find(params[:user_id])
@post = @user.posts.find(params[:id])
if @post.update(post_params)
redirect_to user_path(@post.user)
else
render 'edit'
end
end
def destroy
@user = User.find(params[:user_id])
@post = @user.posts.find(params[:id])
@post.destroy
redirect_to users_path
end
private
def set_user
@user = User.find(params[:user_id])
end
def set_post
@post = @user.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :body, :date)
end
end
ユーザーコントローラー
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# first_name :string
# last_name :string
# created_at :datetime not null
# updated_at :datetime not null
#
class UsersController < ApplicationController
def index
@users = User.page(params[:page]).per(10)
query = params[:query]
query = '*' if query.blank?
@users = User.search(query, page: params[:page])
end
def test
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
flash[:notice] = "User successfully added!"
redirect_to users_path
else
render :new
end
end
def edit
@user = User.find(params[:id])
render :edit
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to users_path
else
render :edit
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path
end
private
def user_params
params.require(:user).permit(:first_name, :last_name)
end
end
EDIT
EDITはAGAIN私が見
良いニュースは、最終的に 'posty.pdf.prawn'に行き、投稿コントローラの' posty'メソッドの代わりにエラーを生成したということです。私は質問の一番下にスクリーンショットを含めました。 – user273072545345
ポストコントローラ – Sravan
から '@ post'の代わりに' @ posts'を送信しても、同じエラーが発生します。 – user273072545345