Помогите с рельсами link_to и постами - PullRequest
6 голосов
/ 28 апреля 2011

Мне нужна помощь в распределении учеников по партиям .. У них много-много отношений.

        <tbody>
            <% Batch.all.each do |b|%>
            <tr>
                <td><%= b.course.name%></td>
                <td><%= b.name %></td>
                <td><%= b.section_name%></td>
                <td><%= link_to "Add", student_batch_students_path(@student, :batch_id=> b.id), :method=> :post%></td>
            </tr>
            <%end%>


        </tbody>

В моем контроллере

def create
    @batch_student = BatchStudent.new(params[:batch_student])
    @batch_student.save    
  end

Мои маршруты

  resources :students do
    resources :batch_students
  end

resources :batches

Но в моей базе данных он создает его со значением student_id и batch_id, равными нулю

Ответы [ 3 ]

21 голосов
/ 28 апреля 2011

Вы обновляете существующий пакет, но не создаете, поэтому вы должны сделать PUT запрос на update действие

<td><%= link_to "Add", student_batch_students_path(@student, :batch_id => b.id), :method=> :post %></td>


def create
  @student = Student.find(params[:id])
  @batch   = Batch.find(params[:batch_id])
  @batch_student = BatchStudent.new(:params[:batch_student])
  @batch_student.student = @student
  @batch_student.batch = @batch
  @batch_student.save
end
2 голосов
/ 28 апреля 2011

Хэш params не содержит хеш :batch_student, потому что вы не отправляете из формы.Параметры должны выглядеть примерно так: {"student_id" => 1, "batch_id" => 1, "method" => "post"}.

Итак, измените действие создания следующим образом:

def create
  @batch_student = BatchStudent.new(params)
  @batch_student.save    
end

# or, a shorter version
def create
  @batch_student = BatchStudent.create(params)
end 

Преимущество использования new в том, что вы можете сделать if @batch_student.save для проверкиза ошибки.

Надеюсь, это поможет.

0 голосов
/ 29 августа 2015

Параметры и метод http должны быть вместе {:batch_id=> b.id, :method=> :post}

<%= link_to "Add", student_batch_students_path(@student), {:batch_id=> b.id, :method=> :post} %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...