2017-03-07 7 views
0

私はレールを初めて使っています。私はブログを作成してEsquireのウェブサイトを見ています。ページはお互いに並んでいて、少し下に並べると、大きなポストを持ち、ポスト配列を続けているので、7番目のポストになり、次の3つになる投稿8-11など。Rails:ブログの最初の6つの記事を選択してから7番目のブログを選択してください。

コントローラを最初の6つのアイテムを呼び出すことができ、次に7番目のアイテムをホームページの後ろに別々に呼び出すことができるようにするのは困難です。

投稿コントローラー:

class PostsController < ApplicationController 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user!, except: [:index, :show] 

    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.all 
    end 

    # GET /posts/1 
    # GET /posts/1.json 
    def show 
    @posts = Post.all.order('created_at DESC') 
    @topsix = @posts.take(6) 
    end 

    # GET /posts/new 
    def new 
    @post = current_user.posts.build 
    @categories = Category.all.map{|c| [ c.name, c.id ] } 
    end 

    # GET /posts/1/edit 
    def edit 
    @categories = Category.all.map{|c| [ c.name, c.id ] } 
    end 

    # POST /posts 
    # POST /posts.json 
    def create 
    @post = current_user.posts.build(post_params) 
    @post.category_id = params[:category_id] 
    respond_to do |format| 
     if @post.save 
      format.html { redirect_to @post, notice: "post was successfully created." } 
      format.json { render :show, status: :created, location: @post } 
     else 
      format.html { render :new } 
      format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /posts/1 
    # PATCH/PUT /posts/1.json 
    def update 
    respond_to do |format| 
     if @post.update(post_params) 
     format.html { redirect_to @post, notice: 'Post was successfully updated.' } 
     format.json { render :show, status: :ok, location: @post } 
     else 
     format.html { render :edit } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    @post.category_id = params[:category_id] 
    end 

    # DELETE /posts/1 
    # DELETE /posts/1.json 
    def destroy 
    @post.destroy 
    respond_to do |format| 
     format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

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

    # Never trust parameters from the scary internet, only allow the white list through. 
    def post_params 
     params.require(:post).permit(:title, :excerpt, :create_date, :author, :body, :category_id, :image) 
    end 
end 

ホームコントローラ:私はホームページ上でそれを呼び出しています

class HomeController < ApplicationController 
    def index 
    @posts = Post.all.order('created_at DESC') 
    @topsix = @posts.take(6) 
    @first3 = @posts.order('created_at DESC').take(3) 
    @sidebar = @posts.take(3) 
    @first4 = @posts.take(4) 
    @first = @posts.take(1) 
    end 
end 

<div class="row no-gutters"> 
    <% @topsix.select { |post| post > 6 } %> 
    <div class="col-md-2"><%= image_tag post.image.url(:large), class: "img-responsive"%> 
     <h6 class="small-title"><%= link_to post.title, post %></h6> 
    </div> 
    <% end %> 
</div> 
+0

必要なものは、1)最初の6個の投稿、2)7番目の投稿、3)残りの部分ですか? –

+0

はい、まさにホームページに表示されます – Ian

+0

@イアン、私の答えをテストしてください。 – fabriciofreitag

答えて

0

私は何が必要だと思うが、このようなものです:

@post1to6 = Post.all.order('created_at DESC').first(6) #top 6 

@post7 = Post.all.order('created_at DESC').first(7).last #7th 

num_post=Post.all.order('created_at DESC').count 
@postRemainder = Post.all.order('created_at DESC').last(num_post-7) #Remainder 
+0

良い解決策ですが、投稿番号が最初のクエリから最後のクエリに簡単に変更できるため、正確ではない可能性があります。 – fabriciofreitag

+0

ええ、私はあなたとそれをよりよく見てきました –

+0

"未定義のメソッド' each 'は#'のエラーを投げています "それぞれのメソッドは1つの項目を取得するだけの問題を抱えているようです – Ian

0
all_posts = Post.all.order('created_at DESC') 
first_seven_posts = all_posts.take(7) 
@first_six_posts = first_seven_posts.take(6) 
@seventh_post = first_seven_posts.last 
@other_posts = all_posts.where('id NOT IN (?)', first_seven_posts.map(&:id)) 
関連する問題