Как получить отношения из другого класса - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу скопировать отношения класса A в класс B

class ShoppingList
  has_many :ingredients
end

class Recipe
  has_many :ingredients
end

Я хочу добавить ингредиенты рецепта в список покупок, но со страницы рецепта (я не будууточните почему, но это имеет смысл в UX).Ингредиенты - это единственное отношение, которое у них общее.

Логика такова: на моей странице рецептов я хочу, чтобы у меня было выпадающее меню, содержащее мои списки покупок.Затем, когда я выбираю список покупок и проверяю, он добавляет ингредиенты рецепта в список покупок.

Я изо всех сил пытался сделать эту работу, я знаю, что, возможно, я сделал несколько вещей неправильно,но вот что я попробовал:

recipes_controller.rb:

def add_ingredients_to_list
  # call method to find the @recipe
  tmp = ShoppingList.find_by_id(shopping_list_params[:shopping_lists])
  tmp.ingredients << @recipe.ingredients
  redirect_to shopping_list_path(id: tmp.id)
end

private

def shopping_list_params
  params.require(:recipe).permit(:shopping_lists, :id)
end

rout.rb:

resources :recipes do
  post 'add_ingredients_to_list' => "recipes#add_ingredients_to_list"
end

recipes / show.html.erb:

<%= simple_form_for :recipe, :url => recipe_add_ingredients_to_list_url(@recipe), :method => 'post' do |f| %>
  <%= f.input :id, :input_html => { :value => @recipe.id}, as: :hidden %>
  <%= f.input :shopping_lists, collecton: ShoppingList.all, as: :select %>
  <%= f.button :submit %>
<% end %>

С этим кодом я получаю этот след:

Rendered recipes/show.html.erb within layouts/application (122.9ms)
Completed 500 Internal Server Error in 395ms (ActiveRecord: 109.7ms)



ActionView::Template::Error (undefined method `shopping_lists' for #<Recipe:0x000055a4c080af88>):
    54:           <% end %>
    55:           <%= simple_form_for :recipe, :url => recipe_add_ingredients_to_list_url(@recipe), :method => 'post' do |f| %>
    56:             <%= f.input :id, :input_html => { :value => @recipe.id}, as: :hidden %>
    57:             <%= f.input :shopping_lists, collecton: ShoppingList.all, as: :select %>
    58:             <%= f.button :submit %>
    59:           <% end %>
    60:         </div>

app/views/recipes/show.html.erb:57:in `block in _app_views_recipes_show_html_erb___4100323442142788090_47083061551380'
app/views/recipes/show.html.erb:55:in `_app_views_recipes_show_html_erb___4100323442142788090_47083061551380'

Мое лучшее предположение - то, что simple_form не подходит для того, что я хочу сделать, но я действительно не знаю, какчтобы сделать эту функцию.

Не могли бы вы помочь мне?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...