私は RoR に比較的慣れていないので、レッスン サイトの共有バックエンドに取り組んでいます。
現在、レッスンとリビジョンの 2 つのモデルがあります。アイデアは、教師がレッスン/新しいページで(タイトル、説明などを使用して)レッスンを作成することです。フォームは、lesson/lesson_id/revision/new ページに他のフィールド (コンテンツ、コメント) がある別のフォームにリダイレクトされます。最終的に、教師は自分のプロフィールにリビジョンをコピーしてレッスンを「保存および変更」できるようになりますが、モデルはまだありません。
新しいレッスンとリビジョンの両方を作成する際に、私はまだ 2 つのおそらく基本的な問題に焦点を当てています。
1) レッスンをユーザーに保存し、改訂をユーザーとレッスンに保存します。ある時点で、リビジョンをユーザーに保存しましたが、レッスンは保存されませんでした。
2) レッスンフォームから改訂フォームへ、改訂フォームから改訂ページへのリダイレクト。コントローラーのリダイレクトと form_for ブロックの 1 つを変更しようとしましたが、役に立ちませんでした。新しいレッスン フォームは、new_lesson_revision_path でリダイレクトしようとした /lesson/1/revision/new ではなく、/lessons に移動する必要があります。改訂フォームも /revisions に戻ります。これは管理者のインデックスになりますが、/lesson/1/revision/1 などに移動したいと思います。
これらの問題のいずれかまたは両方に関するアドバイスをよろしくお願いします。
以下は参照用の私のコードです。routes.rb からの抜粋:
resources :lessons
resources :revisions #For index pages for admin
resources :lessons do
resources :revisions
end
モデル
class Lesson < ActiveRecord::Base
attr_accessible :stable, :summary, :title, :time_created
has_many :revisions, :class_name => "Revision"
has_many :users, :through => :revisions
end
class Revision < ActiveRecord::Base
attr_accessible :comment, :lesson_id, :user_id, :description, :content, :time_updated
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
レッスン new.html.erb
<% if user_signed_in? %>
<h2>New lesson</h2>
<%= form_for @lesson do |f| %>
<%= render "form" %>
<% end %>
<%= link_to 'Back', lessons_path %>
<% else %>
<h3> Please <%= link_to 'sign in', new_user_session_path %> or <%= link_to 'create an account', new_user_registration_path %> to make and save lessons.</h3>
<% end %>
レッスン _form.html.erb
<%= form_for @lesson, :url => new_lesson_revision_path(@lesson_id, @revision) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :summary %><br />
<%= f.text_area :summary %>
</div>
<div class="field">
<%= f.label :stable %><br />
<%= f.check_box :stable %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
リビジョン new.html.erb
<% if user_signed_in? %>
<h2>New revision</h2>
<%= form_for @revision do |f| %>
<%= render "form" %>
<% end %>
<%= link_to 'Back', lessons_path %>
<% else %>
<h3> Please <%= link_to 'sign in', new_user_session_path %> or <%= link_to 'create an account', new_user_registration_path %> to make and save revisions.</h3>
<% end %>
リビジョン _form.html.erb
<%= form_for(@revision) do |f| %>
<div class="field">
<%= f.label :description %><br />
<%= f.text_field :description %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_area :content %>
</div>
<div class="field">
<%= f.label :comment %><br />
<%= f.text_area :comment %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
レッスン コントローラー: 新規/作成
def new
@lesson = Lesson.new
end
def create
@user = current_user
@lesson = Lesson.new(params[:lesson])
#@user.lessons << @lesson
params[:lesson][:user_id] = current_user.id
params[:lesson][:lesson_id] = @lesson.id
respond_to do |format|
if @lesson.save
format.html { redirect_to new_lesson_revision_path(params[:lesson_id]), notice: 'Your lesson was successfully created.' }
format.json { render json: @lesson, status: :created, location: new_lesson_revision_path}
else
format.html { render action: "new" }
format.json { render json: @lesson.errors, status: :unprocessable_entity }
end
end
end
リビジョンコントローラ: 新規/作成
def new
@revision = Revision.new
end
def create
@lesson = Lesson.find(params[:lesson_id])
@revision = @lesson.revisions.new(params[:revision])
@revision.user_id = current_user.id
@revision.lesson_id = @lesson.id
@revision.time_updated = DateTime.now
respond_to do |format|
if @revision.save
format.html { redirect_to current_user.profile }
format.json { }
else
render :new
end
end
end
最後に、私のレーキ ルートの結果のほとんどを以下に示します。
home_index GET /home/index(.:format) home#index
profile POST /profile(.:format) profiles#create
new_profile GET /profile/new(.:format) profiles#new
edit_profile GET /profile/edit(.:format) profiles#edit
GET /profile(.:format) profiles#show
PUT /profile(.:format) profiles#update
DELETE /profile(.:format) profiles#destroy
lessons GET /lessons(.:format) lessons#index
POST /lessons(.:format) lessons#create
new_lesson GET /lessons/new(.:format) lessons#new
edit_lesson GET /lessons/:id/edit(.:format) lessons#edit
lesson GET /lessons/:id(.:format) lessons#show
PUT /lessons/:id(.:format) lessons#update
DELETE /lessons/:id(.:format) lessons#destroy
lesson_revisions GET /lessons/:lesson_id/revisions(.:format) revisions#index
POST /lessons/:lesson_id/revisions(.:format) revisions#create
new_lesson_revision GET /lessons/:lesson_id/revisions/new(.:format) revisions#new
edit_lesson_revision GET /lessons/:lesson_id/revisions/:id/edit(.:format) revisions#edit
lesson_revision GET /lessons/:lesson_id/revisions/:id(.:format) revisions#show
PUT /lessons/:lesson_id/revisions/:id(.:format) revisions#update
DELETE /lessons/:lesson_id/revisions/:id(.:format) revisions#destroy
GET /lessons(.:format) lessons#index
POST /lessons(.:format) lessons#create
GET /lessons/new(.:format) lessons#new
GET /lessons/:id/edit(.:format) lessons#edit
GET /lessons/:id(.:format) lessons#show
PUT /lessons/:id(.:format) lessons#update
DELETE /lessons/:id(.:format) lessons#destroy
root / home#index
/profile(.:format) profiles#show