我正在尝试添加帖子但是帖子控制器无法通过params[:id]
获取课程的ID。
这是我的帖子控制器中的创建方法:
def create
@coursePost = CoursePost.new(post_params)
@coursePost.course_id = params[:id]
if (@coursePost.save)
redirect_to "/courses"
end
end
此表单从相应的课程显示页面获取文本字段数据:
<%= form_for(@newPost) do |f| %>
<div class= "field">
<%= f.text_field :title %>
</div>
<div class= "field">
<%= f.text_field :content %>
</div>
<div class= "actions">
<%= f.submit "Post!" %>
</div>
<% end %>
这是课程控制器中的show方法:
def show
@posts = CoursePost.all.where("course_id = ?", params[:id])
@newPost = CoursePost.new
end
答案 0 :(得分:2)
您为该课程设置的course_id
就像您发送的ID参数一样,但在您的表单中,您不会发送任何ID,只有title
和content
。
因此,您可以尝试添加course_id
以及任何输入以便能够接收它,并且您的控制器会将其作为@coursePost
分配给params[:course_id]
,例如:
在您看来:
<%= form_for(@newPost) do |f| %>
<div class= "field">
<%= f.text_field :course_id %>
</div>
<div class= "field">
<%= f.text_field :title %>
</div>
...
在您的控制器中:
@coursePost.course_id = params[:course_id]
答案 1 :(得分:0)
最近我制定了一个类似的项目。以下是我的代码供您参考。
def create
@course = Course.find(params[:course_id])
@coursePost = CoursePost.new(post_params)
@coursePost.course = @course
@coursePost.user = current_user
if @coursePost.save
redirect_to course_path(@course)
else
render :new
end
end
private
def post_params
params.require(:coursePost).permit(:content)
end
这是课程控制器中的show方法
def show
@course = Course.find(params[:id])
@coursePosts = @course.coursePosts
end
答案 2 :(得分:0)
如果您遵循Rails建议,则会为您处理:
# routes
resources :courses do
resources :posts
end
# posts controller
def new
@course = Course.find(params[:course_id]
@post = @course.posts.new
end
def create
@course = Course.find(params[:course_id])
@post = @course.posts.new(post_params.merge(user_id: current_user.id)
# ...
end
# form
form_for [@course, @post] do |f|
# ...
end