0

Rails 4 と Ruby 2 を実行しています。

食事ごとにカロリーと主要栄養素を追跡できるアプリを作成しています。

ユーザーが一貫して食べる食事を追加できる食事のお気に入りページを追加しています。私は favourites:boolean 移行を通じてこれを行いました。

ユーザーが新しい食事を作成するとき、私は彼らがすでに保存したお気に入りのドロップダウンボックスをcurrent_user.meals.where(favourite: true).

彼らがドロップダウンからお気に入りの 1 つをクリックすると、その情報をフォームに入力するタンパク質、炭水化物、脂肪を入力したいと思います。

これを行う最善の方法は何ですか?

食事コントローラー:

class MealsController < ApplicationController

  .
  .
  .

  def new
    @meal = current_user.meals.build
  end

  def create
    @meal = current_user.meals.build(meal_params)

    respond_to do |format|
      if @meal.save
        format.html { redirect_to root_path, notice: 'Meal was successfully added.' }
      else
        format.html { render action: 'new', notice: 'Meal was not added.' }
      end
      format.js
    end
  end
  .
  .
  .

  private
    def set_meal
      @meal = Meal.find(params[:id])
    end

   .
   .
   .

end

食事フォームの新規作成/編集

<%= form_for(@meal) do |f| %>

  .
  .
  .

  <div class="field inline">
    <%= f.label :protein %> (g)<br>
    <%= f.text_field :protein %>
  </div>

  <div class="field inline middle">
    Carbs (g)<br>
    <%= f.text_field :carbohydrates %>
  </div>

  <div class="field inline right">
    <%= f.label :fats %> (g)<br>
    <%= f.text_field :fats %>
  </div>

  <div class="field actions">
    <%= f.check_box :favourite, class: "favourites" %> Add to Favourites?
  </div>

  <div class="actions">
    <%= f.submit "Save", class: "btn btn-large" %>
    <% if current_page?(edit_meal_path(@meal)) %>
      <%= link_to "Delete", @meal, class: "btn btn-large", method: :delete, data: { confirm: "Are you sure?" } %>
    <% end %>
  </div>

<% end %>

ありがとう!

4

2 に答える 2

1

JavaScript/jQuery でそれを行うことができます。

$(document).ready(function() {
  bindFavoriteMeal();
});

function bindFavoriteMeal() {
  $('#favorite_meal_select').change(function() {
    var mealId = $(this).val();
    var url = "/meals/" + mealId
    $.getJSON(url, function(data) {
      $.each(data, function(key, value) {
        var field = $("#" + key);
        if (field.length) {
          field.val(value);
        }
      });
    });
  });
}

食事コントローラーのshowアクションは JSON に応答する必要があり、フォーム ID が返された JSON キーと一致することを確認する必要があります。JSON は次のようになります。

{ 'name': 'Mustart Salmon', 'protein': 40, 'carbs': 8, 'other_stuff': 'some_value' }

Rails コントローラーの概要: JSON のレンダリングを参照してください。

選択ドロップダウンの実装は、その目的によって異なります。ドロップダウンのアイテムを作成中のオブジェクトに関連付けるためですか? その場合は、@ jordan-davis による他の回答をご覧ください。それとも、以前に行われた選択をユーザーに知らせるだけですか? その場合、私はお勧めしoptions_for_selectます。選択用の組み込みヘルパーが多数あります。

ActionView フォーム オプション ヘルパー

于 2013-10-30T15:26:42.387 に答える
0

ドロップダウンにコレクションの選択を入力します

<%= collection_select :user, :meal, Meal.all, :id, :name, checked: meal.name.first %>

このコードはカット アンド ペーストではありませんが、アイデアを示すためのものです。その後、jQuery を使用して食事 ID を取得し、それを使用して残りの情報を入力する必要があります。次のようなものから始めます。

$(".dropdown-menu li a").click(function(){
    $(this).parents(".dropdown-menu:first").dropdown('toggle')
    var selectedMeal = $(this).text();
于 2013-10-30T15:39:32.190 に答える