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
4

1 に答える 1

0

Show メソッドは、その目的を果たしています。ビューを表示しています。定義したように、プロファイルが表示されるユーザーにリダイレクトする必要があるため、ここで実行しています。

あなたの仕事は、どのような場合でも create メソッドを呼び出すことです:

だからあなたがする必要があるのは:

方法 1new.html.erbは、 で定義したものに対して でコードを定義することですshow.html.erb

そうすることでform_for、フォームが create メソッドを内部的に呼び出すため、パスを明示的に定義する必要はありません。

方法 2は、form_for で次のようにパスを明示的に定義することです。

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

メソッド 1 は、post メソッドの作業を実行してからデータベース関連のタスクを実行する create アクションの作業であるため、必要なことを行うための推奨される方法であることに注意してください。

于 2013-02-26T15:30:05.817 に答える