2014-10-14 9 views
1

У меня возникают проблемы с параметром params.require(). Allow(). У меня есть модель User от разработки и групповая модель, которая представляет класс (как в академическом классе). Когда пользователь находится в представлении индекса групп, я хочу, чтобы они могли нажимать join и становиться частью этой группы.параметр отсутствует или значение пустое Ошибка

<%= form_for @student, :url => students_path(@student), method: :post do %> 
    <%= hidden_field :student_id, :value => current_user.id %> 
    <%= hidden_field :course_id, :value => group.id %> 
    <%= submit_tag "+ Join", :class => "btn btn-primary pull-right join-button" %> 
<% end %> 

Мое мышление было я бы передать идентификатор текущих пользователей, а также идентификатор группы, что они щелкают присоединиться к, как скрытых значений, так что будет просто кнопка присоединиться.

Моя группа индексный метод контроллеров выглядит следующим образом

def index 
    @groups = Group.all 
    @student = Student.new 
end 

My Student Controller выглядит следующим образом:

class StudentsController < ApplicationController 
    before_action :set_student, only: [:show, :edit, :update, :destroy] 

    def index 
    #@students = Student.all 
    @students = Student.where(:student_id => current_user.id) 
    #respond_with(@students) 
    end 

    def show 
    #respond_with(@student) 
    @students = Student.find(params[:id]) 
    end 

    def new 
    @student = Student.new 
    #respond_with(@student) 
    end 

    def edit 
    end 

    def create 
    @student = Student.new(student_params) 
    @student.save 
    #respond_with(@student) 
    end 

    def update 
    @student.update(student_params) 
    #respond_with(@student) 
    end 

    def destroy 
    @student.destroy 
    #respond_with(@student) 
    end 

    private 
    def set_student 
     @student = Student.find(params[:id]) 
    end 

    def student_params 
     params.require(:student).permit(:course_id, :student_id) 
    end 
end 

Всякий раз, когда я пытаюсь отправить форму (ака нажмите на кнопку присоединиться) я получаю ошибка:

param is missing or the value is empty: student 

Я также получаю эту информацию, которая правильна в отношении учащегося и ID группы

Request 

Parameters: 

{"authenticity_token"=>"/bJYZBGr6lfAzb9mYnvRfMZII+QS8iskd0MRuHh+RnE=", 
"course_id"=>"10", 
"student_id"=>"4"} 

Это также вставляет в базу данных, но student_id и course_id равны нулю. Я предполагаю, что это имеет какое-то отношение к сильным параметрам, но я не уверен, что я делаю неправильно.

+0

действие которого перенаправляет при нажатии на кнопке join' – anusha

ответ

2

Похоже, что ваш объект form_builder отсутствует в блоке form_for. Попробуйте это:

<%= form_for @student, :url => students_path(@student), method: :post do |f| %> 
<%= f.hidden_field :student_id, :value => current_user.id %> 
<%= f.hidden_field :course_id, :value => group.id %> 
<%= submit_tag "+ Join", :class => "btn btn-primary pull-right join-button" %> 
<% end %> 

без строителя я не верю, что рельсы обеспечит студенческий хэш в представленном Params

+0

Wow! Я удивляюсь, как это был такой простой ответ. Большое вам спасибо за вашу помощь! Он отлично работает сейчас! – ajk4550

+0

Ваша форма - форма ajs4550. Где разница? – parzival

+0

@parzival замечает, что форма op передает переменную блока | f | и строки, которые объявляют поля формы, не имеют префикса f. [field_name] – hraynaud

1

в до того _action set_student
вы ны пары [: ID], в то время как ваш PARAMS его нет .. Я думаю, что вы должны использовать пары [: student_id] вместо

+0

Я извиняюсь, может ' вы уточните немного больше. Я не вижу, где в before_action set_student я использую param [: id]. – ajk4550

+0

Хорошо, я действительно вижу, что вы сейчас говорите. Я думаю, что это правильно, потому что у ученика будет идентификатор параметра, потому что его большая реляционная база данных, связывающая пользователя с курсом – ajk4550

+0

, у студента в БД будет ID, но вы передаете его в запросе с именем «student_id» " так должно быть ... защиту set_student @student = Student.find (Params [: student_id]) конец ... найти onle без fint_by _... найдет по идентификатору –

0

Поскольку вы передаете @student - это не путь только student_path (@student), а не тот, который у вас был, а именно student_path (@student)?

+0

Когда я это делаю и перехожу на localhost: 3000/groups, я получаю эту ошибку. «Нет маршрутных совпадений {: action =>" show ",: controller =>" students ",: id => nil} отсутствуют необходимые ключи: [: id]" – ajk4550

Смежные вопросы