我有一个用户模型和一个课程模型,用户登录后可以自己上传课程。
但是,我希望管理员能够为用户上载,以防用户不够聪明。
我的想法是使用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操作,以便它知道我要为另一个用户(而不是我自己)创建操作?有比我的逻辑更好的方法吗?
谢谢!
你可以试试看
通知。
<%= 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)
| 归档时间: |
|
| 查看次数: |
9066 次 |
| 最近记录: |