2016-01-31 67 views
1

我正在rails中創建一個組合頁面。在頭版我有一個「關於」部分,我有我自己的個人描述。我希望能夠動態地改變它(不是硬編碼的HTML)。如何在視圖中修改控制器中的變量(ruby on rails)

我想描述一個文本變量或字符串,我可以通過視圖部分中的窗體進行修改。

問題 1.我應該如何在控制器中聲明這個變量? 2.如何從視圖中的窗體訪問並更改它? 3.我的問題有更好的解決方案嗎?

回答

1

辦法做到這一點是要更新的值發送到控制器一個變量,得到了來自地方的內容。你需要有一個form你的投資組合頁面上:

#config/routes.rb 
resources :users do 
    resources :portfolios #-> url.com/users/:user_id/portfolios/:id 
end 

#app/controllers/portfolios_controller.rb 
class PortfoliosController < ApplicationController 
    def show 
     @user = User.find params[:user_id] 
    end 
end 

#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def update 
     @user = User.find params[:id] 
     @user.update user_params 
    end 

    private 

    def user_params 
     params.require(:user).permit(:about) 
    end 
end 

#app/views/portfolios/show.html.erb 
<%= form_for @user do |f| %> 
    <%= f.text_field :about %> 
    <%= f.submit %> 
<% end %> 

沒有任何更多的情況下,這是我能給的最好的。

0

您將需要連接數據庫以存儲和檢索動態內容。如果你使用@來定義它,你可以在視圖中訪問一個變量;

@about= Me.last.about 

其中我可能是您的模型,信息保存在和Me.last將是該模型的實例。您可以通過更新模型像

Me.last.update_attributes :about=> params[:about] 

其中params[:about]會從表單中的字段的PARAMS更新此信息。

0

我會推薦以下guide所以你會得到一個完整的解決方案。下面我介紹了用戶更新某些內容的主要步驟。此代碼不是完整的解決方案。

您的表單會將更新的內容提交給另一個控制器操作(通過其他路由)。

<%= form_for @user do |f| %> 

在該控制器中,您將存儲內容(通常在數據庫中)。

def update 
    @user = User.find(params[:id]) 
    @user.update(user_params) 
    redirect_to :back 
end 

原來的控制器動作會讓你存儲它

def show 
    @user = User.find(params[:id]) 
end 
相關問題