0

私のアプリには多くのドリルを含むレッスンがあります。

レッスンを見ているときに、新しいドリルを作成し、それらにlesson_idを自動的に割り当てられるようにしたいと考えています。

これまでのところ、私が持っているのは、レッスンの id を渡すレッスンの show.html.erb 内のリンクです。次のようになります。

<%= link_to t('.new', :default => t("helpers.links.new")),
          new_drill_path(lesson_id: @lesson.id), :class => 'btn' %>

これにより、lesson_id が params ハッシュに追加されます。コントローラーでこれを行うことで、パラメーターをドリルに渡す方法を見つけました。

  def new
    @drill = Drill.new
    params.each do |key, value|
      method = key.to_s + '='
      method.to_sym
      if @drill.respond_to? method
        @drill.send method, value
      end
    end
  end

ただし、このコードは私には臭いようです。それを行うためのよりレール的な方法があるべきだと思われますが、それが何であるかわかりません。

4

2 に答える 2

2

ネストされたリソースを使用します。このようなもの:

# in config/routes.rb
resources :lessons do
  resources :drills
end

これにより、ネストされた URL/ルートが得られ、そのようなルート ヘルパーは引数として -recordlesson_drills_pathを取り、 のようなパスを生成します。Lesson/lessons/:lesson_id/drills

したがって、URL で指定されるため、DrillsControllerアクセスできます。params[:lesson_id]つまり、次のようなことができます

# POST /lesson/:lesson_id/drills/
def create
  @lesson = Lesson.find(params[:lesson_id])
  @drill = @lesson.drills.new(params[:drill])
  if @drill.save
    ..
  else
    ..
  end
end

CodeReviewでこの回答の詳細を参照し、そこにあるリンクも確認してください。

于 2013-04-15T18:13:26.463 に答える