2011-03-04 77 views
0

我想從視圖中的控制器設置實例變量。例如:Rails從控制器的視圖設置實例變量

class UsersController 

def new 
    @admincheck = false 
end 

鑑於:home.html.erb

<%= link_to "Sign up", signup_path, @admincheck => true, :class => "signup_button round" %> 

與視圖中設置@admincheck爲真,將UsersController響應通過接收@admincheck是真的?

我不確定是否可以在視圖中爲控制器分配實例變量值。謝謝

回答

1

你不能在控制器的視圖中設置實例變量。 而不是這樣做,你可以傳遞一個參數從視圖到控制器。 我想你想添加一個檢查,只有管理員應該能夠'註冊'。 爲此,您可以檢查控制器中的當前用戶狀態並繼續。

+0

謝謝,我會研究一下 – Joe 2011-03-04 20:26:33

+0

我其實希望管理員和普通用戶都使用相同的表單註冊。我只是想傳遞一些東西給控制器,讓它知道這個人試圖以管理員或用戶身份註冊,以便它可以相應地在數據庫中進行記錄。謝謝。 – Joe 2011-03-04 21:31:09

1

嘗試使用Filters來處理這些事情。處理下一個請求的認證決定不應該是視圖的責任。

你想要做什麼?

+0

我有一個用戶表具有布爾管理列。我希望普通用戶和管理員用戶使用相同的表單註冊。所以,我有兩個不同的註冊按鈕導致相同的註冊表單,但我試圖通過表單將@admincheck實例變量設置爲true,以讓控制器知道此人想成爲管理員,以便設置管理員爲在用戶表中爲特殊權限爲true。謝謝 – Joe 2011-03-04 20:19:35

+0

我建議爲用戶和管理員用戶使用不同的資源。看看rails路由系統中的命名空間。使用命名空間,您可以使用相應的控制器users_controller和admin/users_controller爲routes/users/new和/ admin/users/new添加新的路徑。你會得到一個乾淨的分離。用共享的方法和視圖幹你的代碼。 – 2011-03-05 11:16:37

+0

非常感謝您對朱利安的投入。我會研究那 – Joe 2011-03-07 01:46:10

1

您應該簡單地做這樣的事情:

<%= link_to "Sign up", signup_path(:admincheck => true), :class => "signup_button round" %> 

然後在你的控制器,你可以得到admincheck@admincheck = params[:admincheck]

+0

然後@admincheck == true?我試過這個,它似乎並沒有這樣工作 – Joe 2011-03-04 20:52:04

1

你不能從控制器的視圖設置一個實例變量。相對於請求響應週期想想:

瀏覽器 - >請求 - >控制器 - >查看 - >應答 - >瀏覽器

你想從某種看法傳遞給控制器​​和視圖是向下行中上面的例子中它不能將一個變量傳遞給控制器​​,相反,您需要將數據作爲表單域傳遞,並在Pravin和Ashihsh已經建議的控制器中捕獲相同的數據。

+0

這是一個清晰和簡單的解釋,爲什麼你不能這樣做。 – adg 2016-07-06 05:58:22

相關問題