如何获得发布到Rails的课程的ID

时间:2017-04-24 15:04:44

标签: ruby-on-rails ruby

我正在尝试添加帖子但是帖子控制器无法通过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

3 个答案:

答案 0 :(得分:2)

您为该课程设置的course_id就像您发送的ID参数一样,但在您的表单中,您不会发送任何ID,只有titlecontent

因此,您可以尝试添加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