我想在网站上为讨论创建页面,在这些讨论页面上,用户可以撰写帖子。帖子需要属于讨论和用户,以及对用户的讨论。
因此我创建了两个模型,两个控制器,一个部分放在讨论节目页面上。请注意,来自控制器的重定向只是以逻辑方式分配给root_pages和其他,因为我想在表单工作后处理重定向。我没有附加用户模型,因为它很长,我认为没有必要。
我的问题是我无法让帖子控制器为新帖子分配正确的讨论ID。我希望将其记录下来,以便帖子与作者user_id(有效)和discussion_id相关联。我知道使用@ post.discussion_id = @ discussion.id 将无法正确分配,但我已经测试了@ post.discussion_id = 1以查看其余代码是否有效(确实如此) 。
如何更改表单/控制器的设置以在此处分配discussion_id?任何帮助将不胜感激!
讨论控制器:
class DiscussionsController < ApplicationController
def show
@discussion = Discussion.find(params[:id])
@title = @discussion.title
@post = Post.new if signed_in?
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
后控制器:
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
发布模型:
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 %>
答案 0 :(得分:0)
你没有在create方法中创建一个@discussion。
答案 1 :(得分:0)
您的问题是您没有将@discussion放入帖子控制器的机制一种方法可能是将讨论ID放在部分表单中的隐藏字段中,然后在控制器中将其作为参数读取。
兰斯