我如何只在两个部分中显示链接?

时间:2012-01-03 00:19:15

标签: ruby-on-rails ruby ruby-on-rails-3 haml

好吧所以我有一个rails形式部分可以通过2个视图访问新的和编辑动作,但我只需要在编辑表单上显示一个链接,我正在尝试这种方法

新表格

 = render :partial => 'form', :locals => {:f => f}

编辑表格

= render :partial => 'form', :locals => {:f => f, :show_link => true}

形成部分

if defined? show_link

是否有更好的方法来实现这一目标或标准的轨道方式,这是一种更好的方法

4 个答案:

答案 0 :(得分:1)

如果它是一个链接而不是表单元素,通常更好的做法是使用嵌套渲染。换句话说,您有3个文件:new.htmledit.html_form.htmlnew.htmledit.html都呈现_form.htmledit.html包含额外的链接。如果需要,您可以将链接元素设置为在其他位置显示。

如果链接更优雅地流入表单至关重要,请考虑使用content_foryield,以便edit.html包括:

content_for :extras do
    # link here
end

然后_form.html包含yield :extras

注意:我故意不使用模板扩展,不知道你是否正在使用erb,haml等。

答案 1 :(得分:1)

我之前看到这种方式的方法是使用new_recordpersisted,它们是彼此相反的。 persisted用于保存记录,new_record用于未保存的记录。

我会猜测这里的情景,但它是否像“在编辑页面上显示删除链接”?

如果是这样,我会做这样的事情(假设@object是表单的对象):

(新编辑表格)

= render 'form'

(形式偏好)

- if object.persisted?
  = link_to 'Delete', @object, :method => :delete

(例子是haml,但如果需要,应该很容易转换为erb)

答案 2 :(得分:1)

您甚至无需通过编辑传递parameter show_linkdetect 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表单中的newedit具体内容