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

时间:2015-06-03 09:27:09

标签: ruby-on-rails

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

但是,我希望管理员能够在用户不够精明的情况下上传用户。

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

管理员将在用户/:id视图页面

上载用户之前选择该用户
<%= link_to 'Upload Course for User', new_course_path(user_id: params[:id]), class: 'btn btn-primary' %>

然后我能够看到带有参数的创建页面:

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' %>

到控制器中的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

但是我永远不会得到user_id参数,总是只是current_user.id,这是admin_user的id并且不好。

如何设法将user_id参数传递给控制器​​创建操作,以便它知道我正在尝试为另一个用户而不是我自己创建?有没有比我的逻辑更好的方法来处理这个问题?

谢谢!

2 个答案:

答案 0 :(得分: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' %>

在控制器创建方法中。

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

答案 1 :(得分:2)

<%= f.hidden_field :user_id, :value => params[:user_id] %>

因此它将作为表单元素传递