簡體   English   中英

如何將帶有form_for的參數傳遞給rails上的控制器ruby

[英]How to pass parameters with form_for to controller ruby on rails

我有一個用戶模型和一個課程模型,用戶可以在登錄后自行上傳課程。

但是,我希望管理員能夠為用戶上傳,以防用戶不夠精明。

我的想法是使用if語句對用戶上傳和admin-upload使用相同的創建操作。

管理員將在用戶/:id視圖頁面上為用戶上傳之前選擇用戶:

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

然后我能夠看到帶有參數的創建頁面:

HTTP://本地主機:3000 /場/新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參數傳遞給控制器​​創建操作,以便它知道我正在嘗試為另一個用戶而不是我自己創建? 有沒有比我的邏輯更好的方法來處理這個問題?

謝謝!

你可以試試這個。

通知。

<%= 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
<%= f.hidden_field :user_id, :value => params[:user_id] %>

所以它將作為表單元素傳遞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM