0

(5つ星)に評価を追加したい先生というモデルがあります。現在、教師リソース内に評価ネストルート(リソース評価)を追加することでこれを実装しています。次に、モデルを作成しました:(id、user_id、teacher_id、ratings、...)による評価。次に、隠しフィールドを持つフォームを作成しました。そのうちの1つはスターと呼ばれます。ユーザーが星をクリックすると、jQueryを使用してAJAXリクエストを送信し、そのユーザーと教師の評価を作成/更新します。

私の混乱はこれです:私はページに2つの別々のフォームを持っています。レビューアのコメントを書くためのフォームがあります。このフォームには、タイトル、コメント(および送信)の2つのフィールドがあります。次に、非表示のフィールドを含む評価フォームがあります。これは、このようなことを行うための正しい方法ですか?どういうわけか、メインのレビューフォームに評価モデルフィールドを埋め込む必要があるように思われます。

どんな助けでも大歓迎です。ありがとうございました。

[編集]

教師オブジェクトを評価する代わりに、ユーザーが教師へのコメントを評価するようにアプリケーションを更新しました

私のセットアップは次のようなものです:

ルート

resources :comments as :teacher_comments do  
 resource :rating  
end  

モデル

コメント

has_one :rating  
attr_accessible :body, :rating_attributes  
accepts_nested_attributes_for :rating  

評価

belongs_to :comment  
attr_accessible :stars, :user_id, :teacher_id, :comment_id  

見る

<%= form_for( @comment, :remote => true, :url => teacher_comments_path ) do |tc| %>
  <%= tc.text_area :body, :maxlength => 450  %>
  <%= tc.fields_for :rating do |builder| %>
    <%= builder.text_field :stars  %>
  <% end %>
<% end %>

星のtext_fieldが表示されません。表示されていないだけです。見逃したことはありますか?

4

1 に答える 1

1

実際、これらすべてのフィールドを 1 つのフォームにまとめた方が一般的には優れています (ユーザー エクスペリエンスに適しています)。

編集:

メソッドを使用することもできaccepts_nested_attributes_forます(以下のコメントで提案したように)。親モデル (教師) に以下を入れます。次に、両方のモデルの入力を処理する単一のフォームを作成できるはずです。

モデルで:

class Comment < ActiveRecord::Base
  has_one :rating
  accepts_nested_attributes_for :rating
end

コントローラーで:

def new
  @comment = Comment.new
  @comment.rating = Rating.new
end

Ryan Bates は、これらの概念の使用に関する詳細なスクリーンキャストをここで提供しています: Nested Model Form。詳しく知りたい方にオススメです。

オリジナル:

これは、両方のタイプの入力を処理できるアクションをフォームに指定する必要があることを意味します。必要に応じて引き続き使用できform_forますが、デフォルト以外のアクションを指定します (または、 teacher_controller.rb ファイルのデフォルト アクション内のコードを変更します)。

<%= form_for @teacher, :url => {:action => 'create_and_rate'} do |f| %>

評価は教師 (先ほど作成したフォーム) とは異なるモデルである_tagため、評価フィールドには一般的なフォーム ヘルパーを使用する必要があります。

<%= text_field_tag :rating, :name %> # rating's fields should use the generic form helper
<%= f.text_field :name %> # teacher's fields can use the specific form helper

非 RESTful アクションを指しているため、ルート ファイルに追加します。

resources :teacher do
  :collection do
    post 'create_and_rate' # this will match /teachers/create_and_rate to TeachersController#create_and_rate
  end
end
于 2012-06-07T18:55:18.563 に答える