0

Railsは初めてで、ユーザープロファイルを設定し、ユーザーがプロファイルに詳細を追加できるようにフィールドを追加しています。この情報は、登録オプション(アカウント設定)とはまったく異なります。私が抱えていた問題は、プロフィールページの送信ボタンが登録ページの送信ボタンとして認識しているだけでした。したがって、ユーザーがすべてのプロファイルオプション(キャリア、宗教、身長など)を選択し、[送信]をクリックすると、登録ページにリダイレクトされ、プロファイルオプションがユーザーに保存されることはありません。

その問題を修正したと思いますが、「[GET] "/ profile/4"に一致するルートがありません」というルーティングエラーが発生しました。

Users_controller:

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 profile
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      flash[:success] = "Account updated"
      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

これがprofile.htmlです(/ users / user-id-hereを許可した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 :children %><br/>
        <%= f.select :children, [['Do you have or want kids?', nil], 'Yes, they live with me', 'I want kids now', 'I want one someday', 'Not for me']%>
        </div>
    <div class="field">
        <%= f.label :religion %><br/>
        <%= f.select :religion, [['What is your faith?', nil], 'Agnostic', 'Atheist', 'Christian', 'Catholic', 'Buddhist', 'Hindu', 'Jewish', 'Muslim', 'Spiritual without affiliation', 'Other', 'None', 'Prefer not to say'  ]%><br/>
        <%= f.select :religion, [['How important is this to you?', nil], 'Very Important', 'Somewhat Important', 'Not Important']%>
        </div>
    <div class="field">
        <%= f.label :career %><br/>
        <%= f.text_field :career %>
    </div>
    <div class="field">
        <%= f.label :education %><br/>
        <%= f.select :education, [['What is your education level?', nil], 'High school', 'Some college', 'Undergraduate', "Bachelor's", "Master's ", 'PhD', 'Business school', 'Law school', 'Medical school' ]%>
        </div>
    <div class="field">
        <%= f.label :ethnicity %><br/>
        <%= f.select :ethnicity, [['What is your ethnicity?', nil], 'Asian', 'Black', 'Biracial', 'Indian', 'Hispanic/Latin', 'Middle Eastern', 'Native American', 'Pacific Islander', 'White', 'Other' ]%>
        </div>
        <%= f.label :user_drink %><br/>
        <%= f.select :user_drink, [['How much do you drink?', nil], 'Often Drinks', 'Sometimes drinks', 'Never drinks', 'No comment' ]%>
        </div><br/>
        <%= f.label :user_smoke %><br/>
        <%= f.select :user_smoke, [['How often do you smoke?', nil], 'Often smokes', 'Sometimes smokes', 'Never smokes'] %>
        </div>
    <div class="actions"><%= f.submit %></div>

    <h3>About Me</h3>

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

    <div class="field">
        <%= f.label :about_me %><br/>
        <%= f.text_field :about_me %>
    <div class="actions"><%= f.submit %></div>

<% end %>
<% end %>

ルートファイルは次のとおりです。

Dating::Application.routes.draw do
  get 'signup' => 'users#new'
  get 'login' => 'sessions#new'
  get 'logout' => 'sessions#destroy'
  get 'edit' => 'users#edit'
  get 'profile' => 'users#profile'

  resources :users
  resources :sessions
  resources :password_resets

  root to: 'users#new'
4

3 に答える 3

0

変化する

get 'profile' => 'users#profile'

get 'profile/:id' => 'users#profile'

または、はるかに優れた解決策は、ユーザーの下にメンバールートを追加することです

resources :users do
  get :profile, on: :member
end
于 2013-02-27T14:48:33.657 に答える
0

あなたはroutes.rbに入れるべきです

match "/profile/:id" => "users#show"

ただし、show.htmlをprofile.htmlに変更するというアプローチは使用しませんが、これはルートの修正で機能するはずです:)

于 2013-02-27T14:49:45.020 に答える
0

form_forでパスを次のように明示的に定義する必要があります。

<%= form_for(@user, :url => {:action => :profile}) do |f| %>
于 2013-02-27T15:06:26.013 に答える