我是Rails的新手。我正在设置用户个人资料并为其添加字段,以便用户修改他们的个人资料信息,例如职业,关于我,身高,宗教信仰等。此信息与注册选项(帐户设置)完全不同。 / p>
我遇到的问题是,个人资料页面会转发回帐户设置,并说您必须输入密码,它会显示所有帐户设置字段,而不是个人资料字段。所以我需要的是在用户提交信息后,个人资料页面会保留在该页面上,我需要将这些信息保存到他们的帐户中,以便他们以后可以修改它。
以下是用于用户个人资料的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 :(得分:0)
Show方法正在做它的意义。它正在为您展示视图。正如您所定义的那样,它应该被重定向到要显示配置文件的用户,这样做就在这里。
无论如何,你的任务是调用create方法:
所以你需要做的是:
方法一是在new.html.erb
中为您在show.html.erb
中定义的内容定义代码。
这样做,不需要在form_for
中明确定义您的路径,因为表单会在内部调用create方法。
方法二是在form_for中明确定义您的路径:
<%= form_for(@user, :url => {:action => :create}) do |f| %>
请注意,方法一是建议您做所需的方法,因为创建操作的工作是执行post方法工作,然后执行与数据库相关的任务。