0

現在、次のアプリでイベントを作成すると、学籍番号の入力ページに転送されます (別のモデル)。

イベントを作成して、そのイベントに学生番号を追加できるようにしたいのですが、イベントを選択する必要はありません。

Student コントローラーと Event コントローラーには違いはありません。scaffold コマンドが生成したものを使用しました。

これはイベント モデルです。

class Event < ActiveRecord::Base
  has_many :students
end

これはイベントのフォームです:

<%= semantic_form_for @event do |f| %>
  <%= f.inputs do %>
    <%= f.input :name %>
    <%= f.input :description %>
  <% end %>

  <%= f.actions do %>
    <%= f.action :submit, :as => :input %>
  <% end %>
<% end %>

これは学生モデルです。

class Student < ActiveRecord::Base
  validates :studentnumber, 
    numericality: { only_integer: true },
    length: { is: 8}
  belongs_to :event
end

これは学生用のフォームです。

<%= semantic_form_for @student do |f| %>
  <%= f.inputs do %>  
    <%= f.input :event, :label => "Select Your Event", :include_blank => false %>
    <%= f.input :studentnumber, :label => "Student Number", :input_html => { :autofocus => true} %>
  <% end %>

  <%= f.actions do %>
    <%= f.action :submit, :as => :input %>
  <% end %>
<% end %>

現在、イベントを作成すると、[学生] ページに転送され、作成されたイベントがドロップダウンとして表示されます。したがって、学生を作成するには、イベントを選択して [送信] をクリックする必要があります。

作成したイベントとそのイベントの学生番号を常に選択したいと思います。どうすればこれを達成できますか?

4

2 に答える 2

1

そのために、ルート構成でネストされたリソースを使用できます。

resources :events do
  resources :students
end

これにより、次のような学生向けの新しいルートが提供されます/events/:event_id/students/new。イベントを作成した後、イベントコントローラーで新しいアクションにリダイレクトできます。

def create
  @event = Event.create(params[:event])

  if @event.save
    redirect_to new_event_student_path(@event)
  else
    render :edit
  end
end

学生のコントローラーでは、関連するイベントをフェッチするだけです。すべての学生がイベントに属しているため、前のフィルターで実行できます。新しいアクションで、新しい学生をインスタンス化し、イベントをそれに割り当てます。

class StudentsController < ApplicationController

  before_filter :fetch_event

  def new
    @student = Student.new(:event => @event)
  end

  private

    def fetch_event
      @event = Event.find(params[:event_id])
    end

end

学生の新しいビューでは、正しいイベントが自動的に選択され、イベント入力フィールドを非表示に変更できます。

一方、イベント入力フィールドを削除し、フォーム URL をネストされたリソースの作成ルートに変更することをお勧めします。event_students_path(@event)

Rails でのルーティングの詳細については、http://guides.rubyonrails.org/routing.html#nested-resources を参照してください。

于 2013-07-29T15:23:12.017 に答える