У меня есть две модели Author and Post. Я хочу, чтобы автор мог создавать сообщения и иметь связь между этими двумя моделями. Я обычно делаю это, вставляя автора и сообщения, поэтому url будет выглядеть как author /: id/posts. В этом случае я использую params [id], чтобы найти автора, и все работает. Тем не менее, на этот раз я хочу, чтобы сообщения отображались на них отдельно, как/posts/name-of-post, и то же самое с авторами; они будут отображаться как автор/имя автора. Чтобы создать пули, я использую драгоценный камень friendly_id. У меня есть slug, работающий над автором. Однако я не могу найти способ создания сообщения и создания ассоциации.Rails: объединение двух разных моделей, когда не используются параметры [: id]
Пожалуйста, помогите мне создать запись и связать ее с автором.
Автор модели
class Author < ActiveRecord::Base
has_many :posts
validates :name, :slug, presence: true
extend FriendlyId
friendly_id :name, use: :slugged
end
сообщение модель
class Post < ActiveRecord::Base
belongs_to :author
end
Автор Контроллер
def new
@author = Author.new
respond_with(@author)
end
private
def set_author
@author = Author.friendly.find(params[:id])
end
def author_params
params.require(:author).permit(:name, :slug, :bio)
end
Сообщение Контроллер
def new
@post = Post.new
respond_with(@post)
end
def create
@post = Post.new(post_params)
@post.save
respond_with(@post)
end
private
def set_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :body, :slug, :author_id)
end
сообщение _form (тонкий)
= form_for @post do |f|
- if @post.errors.any?
#error_explanation
h2 = "#{pluralize(@post.errors.count, "error")} prohibited this post from being saved:"
ul
- @post.errors.full_messages.each do |message|
li = message
.field
= f.label :title
= f.text_field :title
.field
= f.label :body
= f.text_area :body
.field
= f.label :slug
= f.text_field :slug
.field
= f.label :author
= f.text_field :author
.actions = f.submit 'Save'
Ассоциации работают хорошо, когда я пытаюсь их на консоли. Моя проблема заключается в том, что я не могу получить идентификатор автора, чтобы автоматически заполнить новое представление формы сообщения и создать отношения при сохранении нового сообщения.
Благодарим за отзыв. Я пытаюсь не показывать автора по URL-адресу, когда люди обращаются к блогу. Если я это сделаю, params [: author_id] равен нулю, и я не могу найти сообщения, связанные с этим автором. Как я могу получить сообщение для этого автора без author_id по параметрам? – DJF
После того, как запись блога или сообщения будет сохранена с идентификатором автора на нем, вы можете получить автора из этой записи. См. Обновленный код. – steel
Это работает! Благодаря!!!! – DJF