【问题标题】:render form only for nested model只为嵌套模型渲染表单
【发布时间】:2012-09-10 16:28:43
【问题描述】:

我有一个名为 property 的模型和一个嵌套模型 PropertyReviews。我能够使用 property 和 property_reviews 呈现单个表单。一个属性可以有多个评论,所以当我想添加另一个评论时,我不想为属性呈现表单,而只是为了评论。这是我的代码。

 #for fresh property (with review)
 def new
    @property = Property.new       
    @property.property_reviews.build
 end

下面是属性模型:

class Property < ActiveRecord::Base
  has_many :property_reviews, :dependent => :destroy
  accepts_nested_attributes_for :property_reviews
end

以下是视图和部分视图:

app/views/property/new.html.erb

<%= render :partial => 'form' %>

app/views/property/_from.html.erb

<%= form_for @property, :html => {multipart: true} do |f| %>
    <%= render 'shared/error_messages', object: f.object %>

    <%= f.label :address, "Complete Address" %>
    <%= f.text_area :address, rows: 3 %>

    <%= f.fields_for :property_reviews do |review| %>
      <%= render "review_fields", r: review %>
    <% end %>

<%= f.submit "Submit", class: "btn btn-large btn-primary" %>

app/views/property/_review_fields.html.erb

<p>
   <%= r.label :comments %>
   <%= r.text_area :comments, rows: 5 %>
   ..
   ..
</p>

到目前为止,一切都很好,因为我渲染了 new 以创建具有审查的新属性。

现在我只想添加一个评论,因为属性地址是固定的,它的控制器代码如下:

  # add another review to existing property
  def add_new_review
    @property = Property.find(params[:id])
    @review = @property.property_reviews.build
  end

视图:app/views/property/add_new_review.html.erb

<b><%= @property.address %></b>
<%= form_for @review do |r| %>
  <%= render "review_fields" %>

  <%= f.submit "Submit", class: "btn btn-large btn-primary" %>
<% end %>

当我尝试渲染 add_new_review 页面时,出现以下错误:

undefined method `property_reviews_path' for #<#<Class:0xa2ac3a8>:0xa5e487c>

上线:

<%= form_for @review do |r| %>

这是我的第一个 Rails 项目,请告诉我我做错了什么?

【问题讨论】:

    标签: ruby-on-rails-3 nested-forms nested-attributes form-for nested-form-for


    【解决方案1】:

    这是因为您没有为 property_review 定义路由。为了为您的模型定义独立路径,您应该编写

     resources :property_reviews 
    

    在路由文件中。

    此链接将为您简要介绍 model_name_path 助手,

    Models and Nested Forms

    【讨论】:

      【解决方案2】:

      在嵌套模型中,您应该在 form_for 助手中使用父子模型实例数组。

      试试这个代码

      <%= form_for [@property, @review] do |r| %>
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 2014-08-02
        相关资源
        最近更新 更多