0

我有一个名为教师的模型,我想将评分添加到(5 星)。目前,我通过在教师资源中添加评级嵌套路由(资源评级)来实现这一点。然后我创建了一个模型:使用 (id, user_id, teacher_id, rating, ...) 进行评分。然后我创建了一个带有隐藏字段的表单,其中一个名为stars。当用户点击星号时,我使用 jQuery 发送 AJAX 请求来创建/更新该用户和教师的评分。

我的困惑是:我在页面上有两个单独的表格。我有一个用来写审稿人评论的表格。此表单有两个字段:标题、评论(和提交)。然后我有带有隐藏字段的评级表。这是做这样的事情的正确方法吗?在我看来,我真的应该将评级模型字段以某种方式嵌入到主评论表单中。

任何帮助高度赞赏。谢谢你。

[编辑]

我已经更新了我的应用程序,现在用户不再对教师对象进行评分,而是对教师的评论进行评分

我的设置是这样的:

路线

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

实际上,将所有这些字段放在一个表单中通常会更好(有利于用户体验)。

编辑:

您可以使用该方法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 在此处提供了有关这些概念使用的详细截屏视频:嵌套模型表单。我向想要了解更多细节的用户推荐它。

原来的:

这意味着您需要将表单指向可以处理这两种输入类型的操作。如果您愿意,您仍然可以使用form_for,但指定一个默认操作以外的操作(或更改您的teacher_controller.rb 文件中默认操作中的代码):

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

由于 rating 是一个与teacher(我们刚刚创建的表单)不同的模型,因此您需要_tag对 rating 字段使用通用表单助手。

<%= 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 回答