0

我想为编辑视图实现部分。

所以,我现在有这样的代码部分:

_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 会为我执行此操作,除非我设置自己的 :value ,因为我也想在新视图中使用此部分) . 但我应该通过subject_name的观点。我该如何解决?我应该部分添加条件还是什么?

4

2 回答 2

2

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

因此,如果有一个主题名称 text_field 的值将被设置(如:edit) r 如果没有,则留空(如:new)

于 2012-04-22T13:45:34.777 回答
0

试试这个:

<%= render :partial => 'subject_fields', 
         :locals => { :f => f,
                      :field_placeholder => @everpresent_field_placeholder,
                     }.merge params[:action]=='new' ? { :subject_name => @some_var } : {}
 %> 
于 2012-04-22T13:44:45.917 回答