Я сейчас практикую, как сделать родословную, я успешно реализовал пользователей, которые владеют собаками, но я хочу, чтобы эти пользователи могли создавать родословные отношения с профилями других собак как в ПОС, связанных с: My viewRails форма, которая требует нескольких параметров из разных моделей
Моя проблема заключается в том, что при нажатии на кнопку Добавить, чтобы создать связь (или по крайней мере знать, если он работает) я получаю «действие„новый“не может быть найдено для PedigreeController» сообщение об ошибке. Вот мой контроллер, и, как вы видите, у меня есть только метод create и destroy. Я попытался изменить URL-адрес в представлении, чтобы создать, но без везения. Я также добавил ресурсы: родословную в файл маршрута.
class PedigreeController < ApplicationController
def create
@dog = Dog.find(params[:dog_id])
#@pedigree = pedigrees.build(dog_id: @dog.id, relative_id: @dog.id, relation_name: :string)
@pedigree = @dog.build_pedigree(pedigree_params)
if @pedigree.save
flash[:success] = "Dog relative added."
redirect_to access_dogmenu_path
else
flash[:danger] = "Unable to add this dog as relative"
redirect_to access_dogmenu_path
end
end
def destroy
@pedigree = @dog.pedigrees.find(params[:id])
@pedigree.destroy
flash[:success] = "Relative removed."
redirect_to access_dogmenu_path
end
private
def pedigree_params
params.require(:pedigree).permit(:dog_id, :relative_id, :relation_name)
end
end
Я создал модель pedigree.rb, которая используется для создания отношений с собаками.
class Pedigree < ActiveRecord::Base
belongs_to :dog
belongs_to :relative, class_name: Dog
end
Это модель dog.rb
class Dog < ActiveRecord::Base
belongs_to :user
has_many :pedigrees
has_many :relatives, through: :pedigrees, dependent: :destroy
end
Вот что я в настоящее время, на мой взгляд (который показывает в каждом профиле собаки):
...
<h3>Relatives: </h3>
<ul>
<% for pedigree in @dog.pedigrees %>
<li>
<%= pedigree.relative.dname %>'s - <%= pedigree.relative.relation_name %>
<%= link_to "Remove", pedigree, method: :delete %>
</li>
<% end %>
</ul>
<h4>Add this dog as your dog's relative: </h4>
<%= form_for(Pedigree.new, url: new_pedigree_path) do |p| %>
Select your dog:
<%= p.collection_select(:dog_id, @dogs,:id, :dname, :prompt => "Select your dog") %><br>
Select your dog relation to the dog from this profile:
<%= select_tag(:relation_id, options_for_select([['Sibling', 1], ['Parent', 2], ['Grandparent', 3], ['Great-grandparent', 4], ['Child', 5], ['Grandchild', 6], ['Great-grandchild', 7]])) %><br>
<%= p.submit 'Add Relation' %>
<% end %>
...
Для создания родословной отношение 3 необходимо:
Собственная собака собаки user_id (Кажется, что работает collection_select).
Относительный_ид собаки, которая станет относительной, в этом случае relative_id следует брать прямо со страницы показа, например http://localhost:3000/dogs/2 будет отправлять dog_id = 2 в форму. Кто-нибудь знает, как я могу включить это в мою форму?
имя отношения как родственный, родительский и т. Д. Выпадающий селектор, похоже, работает нормально.
Любая помощь очень ценится.
Спасибо, что помогли мне понять, какие маршруты сделаны, и способ, которым я могу включить dog_id в мой запрос по почте. – Zero