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 方法:

所以你需要做的是:

方法一是new.html.erb为您在 中定义的内容定义您的代码show.html.erb

这样做,不需要显式定义您的路径,form_for因为表单将在内部调用 create 方法。

方法二是在 form_for 中明确定义您的路径:

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

请注意,方法一是做你需要的推荐方法,因为它是创建操作的工作来完成 post 方法的工作,然后执行数据库相关的任务。

于 2013-02-26T15:30:05.817 回答