我想为编辑和新视图实施部分内容。
所以,我现在偏爱这样的代码:
<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
传递给新视图。我怎么解决这个问题?我应该在部分或其他东西中添加条件吗?
答案 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 } : {}
%>