Я попытался реализовать многие из предложенных решений в соответствующих вопросах, но еще не нашел ответа, идеально подходящего для того, чего я пытаюсь достичь в своем приложении Rails 4.Как правильно связать модель с несколькими моделями?
В основном мое приложение имеет три модели. Пользователи, Крючки (встраиваемые всплывающие окна) и Контакты. Пользователи могут создавать Hooks и Contacts в своем интерфейсе. И любой посетитель может создать новый контакт, заполнив форму «Контакт», размещенную в представлении «Хук», и этот контакт связан с пользователем, создавшим этот крючок.
Это прекрасно работает, однако, когда контакт создается путем заполнения формы крюка, нет никакой связи с конкретной Hook они заполнили форму в.
Следующего набор возможностей, которые я хотел бы добавить к моему Приложение требует не только связывания каждого контакта с пользователем, но и с конкретным Крюком, из которого он был создан.
Я немного читал полиморфные ассоциации (модель относится к нескольким моделям), и я понимаю, что это, вероятно, путь. После нескольких неудачных попыток я не уверен, как это реализовать.
Как связать Контакты с крючками, чтобы пользователи могли узнать, с какого крючка был создан контакт?
Вот что я в настоящее время в контроллере Крючки и модели ...
def create
@hook = hook.new(hook_params)
@hook.user = current_user
@contact = Contact.new(contact_params)
respond_to do |format|
if @hook.save
format.html { redirect_to @hook, notice: 'Hook was successfully created.' }
format.json { render :show, status: :created, location: @hook }
format.js
else
format.html { render :new }
format.json { render json: @hook.errors, status: :unprocessable_entity }
format.js
end
end
end
class Hook < ActiveRecord::Base
belongs_to :user
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "https://s3.amazonaws.com/app/assets/leadmagnet.png"
validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
end
А вот контроллер контакты и модель ...
def create
@contact = Contact.new(contact_params)
@contact.user = current_user
respond_to do |format|
if @contact.save
if user_signed_in?
format.html { redirect_to @contact, notice: 'Contact was successfully created.' }
else
format.html { redirect_to @contact, notice: 'Contact was successfully created.' }
end
format.json { render :show, status: :created, location: @contact }
else
format.html { render :new }
format.json { render json: @contact.errors, status: :unprocessable_entity }
end
end
end
class Contact < ActiveRecord::Base
belongs_to :owner, :class_name => 'User'
belongs_to :user
validates :email, :presence => {:message => 'Email cannot be blank'}
end
Что вопрос вы испытываете конкретно? – OneChillDude
Добро пожаловать в переполнение стека. Это не обязательно или особенно желательно рассматривать Stack Overflow как социальный сайт. SO - это скорее онлайн-ссылка, похожая на Википедию, где такие вещи, как «Привет и спасибо заранее за любую помощь в отношении этого препятствия, с которым я сталкиваюсь». и «Спасибо за любую помощь!» на самом деле не нужны. Придерживайтесь написания хорошо продуманных вопросов, и вы отлично справитесь. –