How to pass parameters with form_for to controller ruby on rails -


i have user model , course model, , user can upload courses after login.

however, want admin able upload users in case user not savvy enough.

my thought use same create action both user-upload , admin-upload, if statement.

the admin select user before uploads him in users/:id view page:

<%= link_to 'upload course user', new_course_path(user_id: params[:id]), class: 'btn btn-primary' %> 

then able see create page parameter:

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

and submit form

<%= form_for(@course, html: {class: "form-group"}) |f| %> ... <%= f.submit "create course", class: 'btn btn-primary' %> 

to create action in controller:

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 

however i'm never getting user_id params, current_user.id, admin_user's id , that's not good.

how manage pass in user_id parameter controller create action knows i'm trying create user, not myself? there better way handle logic?

thanks!

you can try this.

in form.

<%= form_for(@course, html: {class: "form-group"}) |f| %> <%= hidden_field_tag "course[user_id]", "#{@user_id}" %> <%= f.submit "create course", class: 'btn btn-primary' %> 

in controller create method.

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 

Comments