0

私のイベントモデルには、フルカレンダーのjsonビューをオーバーライドするこのメソッドがあります。

def as_json(options = {})
    {
      :id => self.id,
      :title => self.title,
      :slug => self.slug,
      :description => self.description || "",
      :start => starts_at.rfc822,
      :end => ends_at.rfc822,
      :allDay => self.all_day,
      :recurring => false,
      :url => Rails.application.routes.url_helpers.event_path(id)
    }

  end

私の関係は次のとおりです。

class Event
    belongs_to: city
    end

class City
    belongs_to: region
    has_many: events

    end

class Region
    has_many: cities
    end

コントローラー

def index   
    @region = Region.find(1)
    @cities = @region.cities
    # full_calendar will hit the index method with query parameters
    # 'start' and 'end' in order to filter the results for the
    # appropriate month/week/day.  It should be possiblt to change
    # this to be starts_at and ends_at to match rails conventions.
    # I'll eventually do that to make the demo a little cleaner.
    @events = Event.scoped  
    @events = @events.after(params['start']) if (params['start'])
    @events = @events.before(params['end']) if (params['end'])

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @events }
      format.js  { render :json => @events }
    end
  end

  # GET /events/1
  # GET /events/1.xml
  def show
    @event = Event.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @event }
      format.js { render :json => @event.to_json }
    end
  end

正しいURL/パスはネストされたリソース(region_city_event)です。地域と都市の値を取得して:urlに配置し、URLが正しくネストされているようにするにはどうすればよいですか?

4

2 に答える 2

0

index アクションはイベントの json で応答する場所であるため、ユーザーを index html ページにリンクするために使用するのと同じリンク ヘルパーを JavaScript コードで使用する必要があります。

あなたの見解では、次のようなものを持つことができます:

<script>
  var calendar_url = '<%= regions_cities_events_path(@region, @city) %>'
</script>

イベント コントローラーのインデックス アクションに次の行を追加する必要があります。

@city = City.find params[:city_id]
于 2012-08-27T17:53:29.027 に答える
0

'/region/city/event_id' をイベント コントローラーの show アクションにマップする必要があることをよく理解していれば、このルートを routes.rb に追加します。

match '/:region_id/:city_id/:event_id' => 'events#show'

次に、EventsController の show メソッドで and を使用して、ユーザーが探していた地域と都市を見つけることができparams[:region_id]ますparams[:city_id]

于 2012-08-27T17:54:43.327 に答える