如何将带有form_for的参数传递给Rails上的控制器ruby

Ste*_*ung 5 ruby-on-rails

我有一个用户模型和一个课程模型,用户登录后可以自己上传课程。

但是,我希望管理员能够为用户上载,以防用户不够聪明。

我的想法是使用if语句对user-upload和admin-upload使用相同的create动作。

管理员会先选择用户,然后再在users /:id视图页面中为其上载:

<%= link_to 'Upload Course for User', new_course_path(user_id: params[:id]), class: 'btn btn-primary' %>
Run Code Online (Sandbox Code Playgroud)

然后,我可以看到带有参数的创建页面:

http:// localhost:3000 / courses / new?user_id = 10

我提交这份表格

<%= form_for(@course, html: {class: "form-group"}) do |f| %>
...
<%= f.submit "Create Course", class: 'btn btn-primary' %>
Run Code Online (Sandbox Code Playgroud)

到控制器中的create动作:

def create
  @course = Course.new(course_params)
  @course.user_id = params[:user_id] || current_user.id
  if @course.save
    redirect_to course_path(@course), notice: 'The course has been created successfully!'
  else
  render 'new'
end
Run Code Online (Sandbox Code Playgroud)

但是,我从来没有得到过user_id参数,总是只有current_user.id,这是admin_user的ID,这不好。

我如何设法将user_id参数传递给控制器​​的create操作,以便它知道我要为另一个用户(而不是我自己)创建操作?有比我的逻辑更好的方法吗?

谢谢!

Ami*_*rma 5

你可以试试看

通知。

<%= form_for(@course, html: {class: "form-group"}) do |f| %>
<%= hidden_field_tag "course[user_id]", "#{@user_id}" %>
<%= f.submit "Create Course", class: 'btn btn-primary' %>
Run Code Online (Sandbox Code Playgroud)

在控制器中创建方法。

def new
  @user_id = params.has_key?("user_id") ? params[:user_id] | current_user.id
  ##OR
  #@user_id = params[:user_id] || current_user.id
end

def create
  @course = Course.new(course_params)
  ## OR
  #@course.user_id = params[:user_id] || current_user.id
  if @course.save
    redirect_to course_path(@course), notice: 'The course has been created successfully!'
  else
    render 'new'
  end
end

private

def course_params
  params.require(:course).permit(:user_id)
end
Run Code Online (Sandbox Code Playgroud)