0

私のデータベースには、「startDate」という名前の列があります。格納された startDate の例は2000-01-01 12:01:01.000000です。(この日付は、Created_at または modified_at の日付とは異なります。このビューの show.html.erb で言及されているイベントが発生した日付になります。)

記事のショー ビューで、同様のマイクロポストが表示される結果 (インデックス) ページにリンクしたいと考えています。これを行う方法がわかりません。

リンク付きのテキストは次のようになります。

2009 年 10 月 17 日水曜日の前後 10 日間に 17 のイベントがあります。

「 17 件のイベント」という単語は、結果ページへのリンクになります。この特定の例での検索期間は、2009 年 10 月 17 日水曜日の前10 日間と10 日間の合計20 日間になります。

これは私の現在の show.html.erb ページです。

<div class="row">
  <div class="span2"><center><img src=<%= @micropost.imageURL %> class="img-polaroid"></center></div>

  <div class="span7">
        <h3><%= @micropost.title %></h3><br>
        <p><small><%= @micropost.loc1T %><br>
            <%= @micropost.startTime.strftime('%A, %B %d, %Y') %></small></p>
        <p><%= raw @micropost.content %></p>
    </div>

  <div class="span3"><img src="http://placehold.it/210x210" class="img-polaroid"><br>
    <small>advertisment</small>
    <div class="divider">&nbsp;</div>
    <div class="well">

    <p>There are <%= link_to(pluralize("event", @microposts.count), "#{microposts_path} related=#{@micropost.id}") %> within 10 days...</p>


  </div>

  </div>
</div>

models/micropost.rb

class Micropost < ActiveRecord::Base
  attr_accessible :content, :title,:keyword,:privacy,:groups,:loc1T,:latitude,:longitude,:loc2T,:loc2Lat,:loc2Lon,:startTime,:endTime,:imageURL
  geocoded_by :loc1T
  after_validation :geocode#, :if => :address_changed?


  belongs_to :user

  validates :user_id, presence: true
  validates :title, presence: true
  validates :keyword, presence: true
  validates :privacy, presence: true
  validates :groups, presence: true
  validates :loc1T, presence: true
  validates :latitude, presence: true
  validates :longitude, presence: true
  validates :loc2T, presence: true
  validates :loc2Lat, presence: true
  validates :loc2Lon, presence: true
  validates :startTime, presence: true
  validates :endTime, presence: true
  validates :imageURL, presence: true

  validates :content, presence: true

  default_scope order: 'microposts.created_at DESC'

  def self.from_users_followed_by(user)
    followed_user_ids = "SELECT followed_id FROM relationships
                         WHERE follower_id = :user_id"
    where("user_id IN (#{followed_user_ids}) OR user_id = :user_id", 
          user_id: user.id)
  end

  def related_microposts(this_startTime)
  @microposts.where('startTime > ? AND startTime < ?', 5.days.since(startTime), 5.days.until(startTime))
  end
end

microposts_controller.rb

class MicropostsController < ApplicationController
  before_filter :signed_in_user, only: [:create, :destroy]
  before_filter :correct_user,   only: :destroy

  def index
  end

   def show
    @micropost = Micropost.find(params[:id])
  end

  def related_microposts(this_startDdate)
  Micropost.where('startDate > ? AND startDate < ?', 5.days.since(this_startDate), 5.days.until(this_startDate))
  end

  def create
    @micropost = current_user.microposts.build(params[:micropost])
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to root_url
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

  def destroy
    @micropost.destroy
    redirect_to root_url
  end

  private

    def correct_user
      @micropost = current_user.microposts.find_by_id(params[:id])
      redirect_to root_url if @micropost.nil?
    end
end

これはデータベース列のスクリーンショットです...

データベースのスクリーンショット

4

1 に答える 1

0

解決すべき問題がいくつかあるようです。

(Rails の規則に従って、あなたのコラムが実際に呼ばれていると仮定しますstart_date:-))

start_dateまず、記事から 5 日以内の記事のリストを取得するには、次のようなものを使用できます。

def related_articles(this_start_date)
  Article.where('start_date > ? AND start_date < ?', 5.days.since(this_start_date), 5.days.until(this_start_date))
end

時間関数が間違っている可能性がありますが、詳細についてはこちらを確認してください

related_articles、あなたが必要とするものがあります。カウントだけが必要な場合は、 で取得するrelated_articles.countか、または に保存でき@articlesます。現在の記事を表示するメイン ページに@article、次のような関連記事を表示するリンクを追加します。

There are <%= link_to(pluralize("event", @articles.count), "#{articles_path}?related=#{@article.id}") %> within 10 days...

articles_pathindexは、すべての記事を一覧表示するビューへのパスであるためindex、特別なクエリ文字列パラメーターが存在する場合に、コントローラーのメソッドにコードを追加して、それらの記事のみを一覧表示します。

if params[:related]
  this_article = Article.find params[:related]  # 123 is the id of the main article
  @articles = Article.related_articles(this_article)
else
  @articles = Article.all
end

ちょっとまとまりのない答えですが、要点はわかると思います:-)

于 2012-10-18T03:08:59.443 に答える