2013-02-26 36 views
0

我是新來的Rails。我正在設置用戶配置文件併爲其添加字段,以供用戶修改他們的個人資料信息,例如職業,關於我,身高,宗教信仰等。此信息與註冊選項(帳戶設置)完全不同。配置文件選項重定向到帳戶設置,而不是保存

我遇到的問題是,個人資料頁面將轉回到帳戶設置,並說你必須輸入密碼,並顯示所有帳戶設置字段,而不是配置文件字段。因此,我需要的是在用戶提交信息後,個人資料頁面仍保留在該頁面上,我需要將這些信息保存到他們的帳戶,以便他們稍後可以對其進行修改。

這裏的show.html文件,該文件是爲用戶配置文件:

<h1><%= @user.username %></h1> 

<h2>Basics</h2> 

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

    <div class="field"> 
     <%= f.label :height %><br/> 
     <%= f.select :about_me, [['Feet', nil], '4', '5', '6'] %> 
     <%= f.select :about_me, [['Inches', nil], '0', '1', '2', '3', '4',     
           '5', '6', '7', '8', '9', '10', '11'] %> 
     </div> 
    <div class="field"> 
     <%= f.label :career %><br/> 
     <%= f.text_field :career %> 
    </div> 
    <div class="actions"><%= f.submit %></div> 
<% end %> 

這裏的用戶控制器,我知道我有它重定向到@user它發送回帳戶設置頁面,但我不不知道要設置它的值是什麼,所以它不會:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     UserMailer.registration_confirmation(@user).deliver 
     session[:user_id] = @user.id 
     redirect_to root_url, notice: "Thank you for signing up!" 
    else 
     render "new" 
    end 
    end 

    def show 
    @user = User.find(params[:id]) 
    if @user.show_profile(params[:user]) 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def edit 
     @user = User.find(params[:id]) 
end 

    def index 
    @users = User.all 
    end 

    def destroy 
    User.find(params[:id]).destroy 
    flash[:success] = "User deleted." 
    redirect_to users_url 
    end 

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     flash[:success] = "Account updated" 
     redirect_to @user 
    else 
     render 'edit' 
    end 
end 
end 

回答

0

顯示方法正在做它的意義。它向你展示了這個觀點。如你所定義的那樣,它應該被重定向到要顯示配置文件的用戶,所以在這裏做。

你的任務是調用create方法無論是哪種情況是:

所以,你需要做的是:

方法一是定義在new.html.erb代碼爲您在show.html.erb定義是什麼。

這樣做,不需要在form_for中明確定義路徑,因爲表單將在內部調用create方法。

方法二是在的form_for爲明確定義您的路徑:

<%= form_for(@user, :url => {:action => :create}) do |f| %> 

請注意,方法之一就是做你所需要的,因爲它創建行動工作的推薦方法做post方法的工作,然後做數據庫相關的任務。

+0

我有一個人爲網站註冊時設置的new.html.erb。我想要做的是註冊用戶輸入他們的個人資料信息。當用戶註冊時,他們只在帳戶設置中輸入。現在,他們登錄後可以填寫他們的個人資料。這聽起來不像你的解決方案地址,但如果我錯了,請糾正我。此外,我認爲該行動應該更新,因爲我沒有創建一個新用戶。還是創建它,因爲它本質上是創建一個新的配置文件? – 2013-02-26 15:36:21

+0

更新操作適用於用戶編輯,就像爲用戶new創建操作一樣。由於您沒有編輯用戶詳細信息,因此您不應該更新。因此您可以創建自定義操作並在其中提供功能。 – 2013-02-26 17:18:10

+0

哦,好吧,這是有道理的。我已經嘗試了一些變化,但沒有任何工作,只要你的方法一關注。你能爲我提供一個例子嗎?我仍然想自己想出它,但某些例子會幫助我更多一點,因爲我是編程新手。我試圖找出它,但仍然在此期間 – 2013-02-27 13:57:47

相關問題