好吧所以我有一个rails形式部分可以通过2个视图访问新的和编辑动作,但我只需要在编辑表单上显示一个链接,我正在尝试这种方法
新表格
= render :partial => 'form', :locals => {:f => f}
编辑表格
= render :partial => 'form', :locals => {:f => f, :show_link => true}
形成部分
if defined? show_link
是否有更好的方法来实现这一目标或标准的轨道方式,这是一种更好的方法
答案 0 :(得分:1)
如果它是一个链接而不是表单元素,通常更好的做法是使用嵌套渲染。换句话说,您有3个文件:new.html
,edit.html
和_form.html
。 new.html
和edit.html
都呈现_form.html
,edit.html
包含额外的链接。如果需要,您可以将链接元素设置为在其他位置显示。
如果链接更优雅地流入表单至关重要,请考虑使用content_for
和yield
,以便edit.html
包括:
content_for :extras do
# link here
end
然后_form.html
包含yield :extras
。
注意:我故意不使用模板扩展,不知道你是否正在使用erb,haml等。
答案 1 :(得分:1)
我之前看到这种方式的方法是使用new_record
和persisted
,它们是彼此相反的。 persisted
用于保存记录,new_record
用于未保存的记录。
我会猜测这里的情景,但它是否像“在编辑页面上显示删除链接”?
如果是这样,我会做这样的事情(假设@object是表单的对象):
(新编辑表格)
= render 'form'
(形式偏好)
- if object.persisted?
= link_to 'Delete', @object, :method => :delete
(例子是haml,但如果需要,应该很容易转换为erb)
答案 2 :(得分:1)
您甚至无需通过编辑传递parameter show_link
,detect the action
可以在form view
中传递。{/ p>
在你可以使用的两个地方
<%= render :partial => 'form', :locals => {:f => f} %>
并且在form partial
中你可以像
<%= (link_to ........ ) if params[:action] == "edit" %>
如果链接是html标记,则可以像
那样进行<% if params[:action] == "edit" %>
<a href="...">click me to edit</a>
<% end %>
现在它将检查render
是否发生了edit
动作,link
将被添加。
答案 3 :(得分:1)
我经常做类似
的事情if @record.new_record?
# render 'new' partial
else
# render 'edit' partial
end
区分我的rails表单中的new
和edit
具体内容