0

レッスン モデルとリビジョン モデルがあります。レッスンが作成されると、その最初のリビジョンが作成されます (モデルには has_many through: リレーションがあります)。ユーザーは古いリビジョンを更新することで新しいリビジョンを作成できるはずですが、更新は新しいリビジョンに保存されます。

現在、私のレッスンと最初の改訂バージョンは、ネストされたフォームを介して適切に保存されています。私が知りたいのは、更新フォームが行うことを行う「新しいリビジョン」フォームを作成し、結果を新しいリビジョンに保存するにはどうすればよいかということです。(新しいリビジョンが関連付けられているレッスンは変更されません。)

編集: 以下の更新された (できればより簡潔な) コードを使用すると、新しいリビジョンは保存されますが、フォームに移動することはありません。リビジョンのリストを見ることができるプロファイル ページに直接送られます。単なる複製ではなく、どうすれば更新できますか? http://guides.rubyonrails.org/form_helpers.htmlを読んでいますが、明らかにまだステップがありません。

アプリ全体はhttps://github.com/arilaen/penにあります。

リビジョンコントローラー

class RevisionsController < ApplicationController

  def new
    @revision = Revision.new
    @lesson = Lesson.find(params[:lesson_id])
  end
  def create
    @revision = Revision.new(params[:revision])
    @revision.user_id = current_user.id
    @revision.time_updated = DateTime.now
    @revision.save
    redirect_to current_user.profile
  end
  def show
    @revision = Revision.find(params[:id])
  end
  def edit
    @old_revision= Revision.find(params[:id])
    @revision = Revision.new(params[:revision])
    @revision.user_id = current_user.id
    @revision.lesson_id = @old_revision.lesson_id
    @revision.time_updated = DateTime.now
    @revision.save
    redirect_to current_user.profile
  end
end

リビジョン モデル:

class Revision < ActiveRecord::Base
  attr_accessible :comment, :lesson_id, :user_id, :description, :content, :time_updated, :old_revision_id
  belongs_to :lesson, :class_name => "Lesson", :foreign_key => "lesson_id"
  belongs_to :user, :class_name => "User", :foreign_key => "user_id"

  accepts_nested_attributes_for :lesson

end

新しい改訂フォーム

edit.html.erb

<%= form_for @revision do |f| %>
  <%= render "form" %>
<% end %>

リビジョンの _form.html.erb

<%= form_for @revision :url => { :action => "create" } do |f| %>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_field :description, :value => @old_revision.description %>
  </div>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_area :content, :value => @old_revision.content %>
  </div>
  <div class="field">
    <%= f.label :comment %><br />
    <%= f.text_field :comment, :value => @old_revision.comment %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

リビジョン/ショーからの抜粋:

  <% if current_user.nil? %>
  <% else %>
  <% if @revision.user_id = current_user.id %>
  <%= link_to 'New Revision', edit_lesson_revision_path(@revision.id) %><br />
  <% else %>
  <%= link_to 'Copy', edit_lesson_revision_path(@revision.id) %>
  <% end %>
  <% end %>

これは以前にリクエストされたものであり、ソリューションに関連する場合と関連しない場合があるため、私のレッスン モデルは次のとおりです。

class Lesson < ActiveRecord::Base
  attr_accessible :stable, :summary, :title, :time_created, :revision, :revisions_attributes
  has_many :revisions, :class_name => "Revision"
  has_many :users, :through => :revisions
  accepts_nested_attributes_for :revisions
end

ルート.rb

resources :revisions
  resources :lessons do
    resources :revisions
  end
4

0 に答える 0