【问题标题】:How to pass parameters with form_for to controller ruby on rails如何将带有form_for的参数传递给rails上的控制器ruby
【发布时间】:2015-06-03 09:27:08
【问题描述】:

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

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

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

管理员会在为他上传之前在 users/: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' %>

到控制器中的创建操作:

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

谢谢!

【问题讨论】:

  • 您可以使用hidden_fielduser_id 传递给create 操作
  • @Stephen Leung,请发布您的控制器新方法和 course_params 方法

标签: ruby-on-rails


【解决方案1】:

你可以试试这个。

在表格中。

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

【讨论】:

    【解决方案2】:
    <%= f.hidden_field :user_id, :value => params[:user_id] %>
    

    所以它将作为表单元素传递

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2017-03-16
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多