Как я могу сделать несколько ассоциаций модели через HTML-форму? - PullRequest
1 голос
/ 14 июня 2011

Я хотел бы создавать страницы для обсуждений на веб-сайте, и на этих страницах обсуждения пользователи могут писать сообщения.Посты должны принадлежать обсуждению и пользователю, а обсуждение - пользователю.

Таким образом, я создал две модели, два контроллера и один частичный для размещения на странице обсуждения обсуждения.Обратите внимание, что перенаправления от контроллеров просто присваиваются root_pages и другим логическим образом, так как я хотел иметь дело с перенаправлениями, как только у меня заработала форма.Я не прикреплял пользовательскую модель, так как она длинная, и я не думал, что это необходимо.

Моя проблема в том, что я не могу заставить контроллер почты назначить правильный идентификатор обсуждения новомусообщение.Я хотел бы, чтобы это было записано, чтобы посты ассоциировались с автором user_id (который работает) и Discussion_id.Я знаю, что использование @ post.discussion_id = @discussion.id не назначит это должным образом, но я проверил @ post.discussion_id = 1, чтобы увидеть, работает ли остальная часть кода (работает).

Как мне изменить настройки форм / контроллеров, чтобы назначить здесь параметр тут:Любая помощь будет принята с благодарностью!

Диспетчер обсуждений:

class DiscussionsController < ApplicationController
  def show
    @discussion = Discussion.find(params[:id])
    @title = @discussion.title
    @post = Post.new if signed_in?
  end

end

Модель обсуждения:

class Discussion < ActiveRecord::Base
  attr_accessible :title, :prompt
  belongs_to :user

  validates :title, :presence => true, :length => { :within => 5..100 }
  validates :prompt, :presence => true, :length => { :within => 5..250 }
  validates :user_id, :presence => true
  has_many :posts, :dependent => :destroy

 default_scope :order => 'discussions.created_at DESC'
end

Post Controller:

class PostsController < ApplicationController
  def create
    @post = current_user.posts.build(params[:post])

    @post.discussion_id = @discussion.id
    if @post.save
      redirect_to discussion_path
    else
      redirect_to user_path
    end
  end

end

Почтовая модель:

class Post < ActiveRecord::Base
  attr_accessible :content

  validates :content, :presence => true, :length => { :maximum => 10000 }
  validates :user_id, :presence => true
  validates :discussion_id, :presence => true
  belongs_to :user
  belongs_to :discussion

  default_scope :order => 'posts.created_at ASC'
end

Частично для почтовой формы:

<%= form_for @post do |f| %>
<%= render 'shared/error_messages' %>
<div class="field">
    <%= f.text_area :content, :class => "inputform largeinputform round" %>
</div>

<div class="actions">
    <%= f.submit "Post", :class => "submitbutton round" %>
</div>
<% end %>

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Ваша проблема в том, что у вас нет механизма для передачи @discussion в пост-контроллер. Один из подходов может заключаться в том, чтобы поместить идентификатор обсуждения в скрытое поле в вашей частичной форме, а затем прочитать его в вашем контроллере в качестве параметра.

Lance

0 голосов
/ 15 июня 2011

в PostsController вы не создаете @discussion в методе create.

...