yuki8634
@yuki8634 (yuki kawakita)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

カレンダーの表示について

解決したいこと

Ruby on Railsでクックパッドのようなwebアプリを作っています。
レシピを今週の献立カレンダーに追加する機能があるのですが、先週分、来週分が見れず、
追加実装したいのですが、どのようにやればいいかわかりません。
何か良い解決策があれば教えてください

仕様

  • レシピ詳細画面から献立追加ボタンを押し、追加する日付を選択する。
  • マイページに献立が追加される

該当するソースコード

app/controllers/users_controller.rb
def show
    @user = User.find(params[:id])
    @recipes = @user.recipes.order('created_at DESC')
    @menus = Menu.all
    @menu = Menu.new
    get_week
end

private
def get_week
    wdays = ['(月)', '(火)', '(水)', '(木)', '(金)', '(土)', '(日)']
    @first_day = Date.today.beginning_of_week

    menus = Menu.where(user_id: @user.id, date: @first_day..@first_day + 6)

    @week_days = []
    7.times do |x|
      today_menus = []
      menus.each do |menu|
        today_menus.push(menu) if menu.date == @first_day + x
      end
      day = @first_day + x
      days = { wday: wdays[day.wday - 1], month: day.month, date: day.day, menu: today_menus }
      @week_days.push(days)
    end
  end
app/views/users/show.html.erb
<h1>献立表</h1>
    <div class='calendar'>
      <% @week_days.each do |day| %>
        <div class='item'>
          <div class='date'>
            <%= day[:month] %>/<%= day[:date] %><%= day[:wday]%>
          </div>
          <div class ="menu-container">
            <ul class ="menu-list">
            <% day[:menu].each do |x|%>
              <li>
                <%= link_to x.recipe.title, recipe_path(x) %>
                <%= link_to "➕", create_list_path(x.recipe), method: :post, class: "no-underline" %>
                <%= link_to "❌", recipe_menu_path(x), method: :delete, class: "no-underline", class: "recipe-destroy", data: { confirm: '本当に削除しますか?' } %>
              </li>
            <% end %>
            </ul>
          </div>
        </div>
      <% end %>
    </div><!--calender-->

実現したいこととしては、ページに来週分と先週分のカレンダーを表示するリンクを載せて、
それをクリックするとカレンダーが切り替わるようにしたいです。
(できれば非同期での実装)

自分で試したこと

users_controller.rbにてget_weekメソッドの
@first_day = Date.today.beginning_of_week
@first_day = Date.today.beginning_of_week + 7.daysにすると来週分
@first_day = Date.today.beginning_of_week - 7.daysにすると先週分
のカレンダーが表示されました。
なので、

  1. リンクを押したらget_weekメソッドの内容を変更して再読み込みさせる
  2. あらかじめget_last_weekget_next_weekメソッドを作っておいて、リンクを押したらそのメソッドを読み込ませる
    などの方法を考えました。
    しかし、リンクをクリックしてから読み込ませるメソッドを変えることができませんでした。
0

1Answer

def show
  get_week(params[:beginning_of_week].to_date)
end

def get_week(first_day = Date.today.beginning_of_week)
  @first_day = first_day
  ...
1Like

Comments

  1. @yuki8634

    Questioner

    ご回答ありがとうございますた。
    こちらのやり方をベースに、user/show.html.erbに行くときは常にbegining_of_weekというパラメーターを持たせて実装することができました。
    ありがとうございました!

Your answer might help someone💌