2013-06-21 70 views
1

我想將我的<%= form_for(@something) do |f| %>放置在多個頁面內的app/views/something/new.html中,因此可能在應用程序中/views/layouts/application.html.erb獲取'form_for(@something)'在new.html.erb之外工作

如何獲得@something變量和形式正常那裏工作,或其他地方 - 因爲它在控制器#NEW的SomethingController Action的定義,似乎只可在相應的new.html.erb查看..

+0

很肯定這是不是最好的做法,但你試過應用控制器? – Spencer

+0

所以基本上你想要在你的'app/views/layout/application.html.erb'中放置一個表單,如果我站得正確的話 – David

+0

是的,但是我的SomethingController裏面有'create'動作。 –

回答

1

嘗試

<%= form_for SomeThing.new do |f| %> 
2

你可以把表格放在任何地方,只要在控制器中提供一個實例變量@something

基本用法在這裏。

ThisThingsController 
    def show 
    @this_thing = foo 
    @that_thing = bar 
    end 
end 

# View 
<%= @this_thing %> 
<%= form_for @that_thing %> 

當然,您可以使用partial來渲染窗體,只要您使用它需要的變量來提供窗體即可。

1

沒有完全理解你要完成什麼,我會提出這個建議。 將一個過濾器添加到您的ApplicationController中(或者您可以創建一個模塊並將其混合到需要的地方)。然後在需要時調用before_filter。此示例將始終運行before過濾器:

class ApplicationController 
    before_filter :set_something 

    private 
    def set_something 
    @something = ... # Fill in the logic here 
    end 
end 

然後在需要的地方添加表單。您甚至可以根據是否設置了@something來有條件地顯示它。

<% if @something %> 
    # Form goes here 
<% end %> 
相關問題