从标记渲染Rails

时间:2013-02-26 07:48:10

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我的form_tag设置如下:

<% Rating.find(:all, :conditions => ["recommendation_id = ? and rating_set = ? and product_id = ?", rec.id, params[:rating_set_id], params[:product_id]]).each do |rate| %>
            <%= text_field_tag "recommendation_ratings[#{rec.id}][notes]", "#{rate.notes}", :id => "rec_note_text", :placeholder => 'Enter Notes..'%>
                <% end %>

这在满足查找条件时有效,但是在提交表单之前,advice_id不会持久保存到DB,因此此find方法不会返回任何内容,这会导致我的表单标记不呈现。它仅在满足查找的所有条件时呈现。无论是否满足查找条件,我如何渲染表单?

1 个答案:

答案 0 :(得分:1)

您正在以错误的方式使用视图/控制器。

您应该定义名为 _rating.html.erb

的新部分

在那里你的form_tag(请替换为有效值,我刚才举例)

<%= text_field_tag "recommendation_ratings[#{id}][notes]", "#{notes}", :id => "rec_note_text", :placeholder => 'Enter Notes..'%>

然后,无论您在哪里呈现评级列表,例如在评级/ show.html.erb

<%= render @ratings%>

并且在Ratings_controller中你应该输入:

define show
  @ratings = Ratings.find_all_with_conditions
end

在模型Rating.rb中你应该把:

define self.find_all_with_conditions
  Rating..find(:all, :conditions => []) #put your logics here for finding all
end

我刚刚写了一个例子,你应该如何组织它,我还没有把所有有效的参数放在一起,我只是为你看看如何组织你的视图。

我希望它会有所帮助。