Rails 3 - 部分用于新页面和编辑页面

时间:2012-04-22 13:25:25

标签: ruby-on-rails ruby partial-views

我想为编辑视图实施部分内容。

所以,我现在偏爱这样的代码:

_subject_fields.html.erb

<div class="control-group">
  <%= f.label :subject_name, "Name of subject", :class => "control-label" %>

  <div class="controls">
    <%= f.text_field :subject_name,
                     :placeholder => field_placeholder,
                     :value => subject_name %>
  </div>
</div>

我用这样的代码称呼我的部分:

<%= render :partial => 'subject_fields', 
         :locals => { :f => f,
                      :field_placeholder => @everpresent_field_placeholder,
                      :subject_name => @some_var,
                     }
 %> 

但这是问题所在。当我在编辑视图中呈现这样的部分时,我不应该通过subject_name,因为rails会自动为我做这个(我的意思是rails为我做这个,除非我设置我自己:我做的值因为我也想在新视图中使用这个部分)。但我应该将subject_name传递给视图。我怎么解决这个问题?我应该在部分或其他东西中添加条件吗?

2 个答案:

答案 0 :(得分:2)

根本没有必要拥有价值部分。当您说f.text_field :subject_name时,您在f表单上调用text_field。 f作用于一个对象(如form_for @blog_post do |f|中的@blog_post)。 Rails尝试在@blog_post上调用text_field方法,如果有返回值则将其填入text_field。

因此,如果有一个(如:编辑)r,如果没有一个(如:新),则会设置subject_name text_field的值为空白

答案 1 :(得分:0)

试试这个:

<%= render :partial => 'subject_fields', 
         :locals => { :f => f,
                      :field_placeholder => @everpresent_field_placeholder,
                     }.merge params[:action]=='new' ? { :subject_name => @some_var } : {}
 %>