date_select и построить вопрос - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть модель регистрации, как показано ниже, и я пытаюсь использовать date_select и options_from_collection_for_select в представлении формы.У меня проблемы с созданием, так как я не знаю, использовать ли .build или .new, и date_select, похоже, отправляет день / месяц / год отдельно в форме, например,

Parameters: {"utf8"=>"✓", "authenticity_token"=>"HUQmbkmoATm6P/Avl11wmYqMrYeXVTZ/qmYfC2dpAFM=", "enrolment"=>{"course"=>"First Aid", "expiry(1i)"=>"2012", "expiry(2i)"=>"2", "expiry(3i)"=>"20"}, "commit"=>"Create Enrolment", "group_id"=>"2"}

Моя модель регистрации...

class Enrolment < ActiveRecord::Base
  belongs_to :course
  belongs_to :group
  attr_accessible :course_id, :group_id, :expiry
  validates_presence_of :expiry, :course_id, :group_id 
end

В моем _form.html.erb

<%= form_for([:admin,@group,@enrolment]) do |f| %>
---
  <div class="field">
    <%= f.label :course %><br />
    <%= f.select :course, options_from_collection_for_select(@courses, 'name', 'name') %>
  </div>
  <div class="field">
    <%= f.label :expiry %><br />
    <%= f.date_select :expiry, :start_year => Time.now.year, :end_year => Time.now.year + 5 %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

В моем контроллере регистрации

  def new
    @group = Group.find(params[:group_id])
    #@enrolment = @group.enrolments.build
    @enrolment = Enrolment.new
    @courses = Course.all

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @enrolment }
    end
  end

  def create
    @group = Group.find(params[:group_id])
    @course = Course.find_by_name(params[:enrolment][:course])
    @courses = Course.all
    #@enrolment = Enrolment.new(params[:enrolment])
    @enrolment = @group.enrolments.build(:course_id => @course.id)

    respond_to do |format|
      if @enrolment.save
        format.html { redirect_to admin_group_path(@group), notice: 'Enrolment was successfully created.' }
        format.json { render json: @enrolment, status: :created, location: @enrolment }
      else
        format.html { render action: "new" }
        format.json { render json: @enrolment.errors, status: :unprocessable_entity }
      end
    end
  end

Когда я пытаюсь отправить его, я получаю подтверждениеошибки, по которым мой срок действия не может быть пустым, как я могу добавить это в метод create, чтобы он работал?Любая помощь очень ценится

1 Ответ

1 голос
/ 21 февраля 2012

Вы пробовали только:

@enrolment = @group.enrolments.build(params[:enrolment])

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

options_from_collection_for_select(@courses, 'id', 'name')

Таким образом, вы передаете идентификатор вместо имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...