2012-01-03 79 views
0

行,所以我有一個導軌形成部分由2次新編輯的動作訪問,但我只需要顯示編輯表單上的鏈接通過我試圖這種方法我如何只顯示兩個部分中的一個鏈接?

新形式

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

編輯形式

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

形式局部

if defined? show_link 

有沒有更好的方法來實現這一點或標準的導軌方式是一種更好的方法

回答

1

如果它是一個鏈接而不是一個表單元素,通常有更好的做法是有嵌套的渲染。換句話說,你有3個文件:new.html,edit.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

我之前看到過的方法是使用new_recordpersisted,它們是相互顛倒的。 persisted用於保存記錄,而new_record用於未保存的記錄。

我想在這裏猜想這個場景,但是它有點像'在編輯頁面上顯示刪除鏈接'?

如果是的話,我會做這樣的事情(假設@object是表單對象):

(新的編輯形式)

= render 'form' 

(形成部分)

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

(例子在哈姆,但應該很容易轉換爲erb,如果有必要)

1

你不需要即使通過parameter show_link編輯,您可以detect the action本身在form view

在兩個地方

可以使用

<%= 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將被添加。

1

我平時做這樣的事情

if @record.new_record? 
    # render 'new' partial 
else 
    # render 'edit' partial 
end 

到不同的newedit具體的事情我在軌形成

相關問題