你好我对rails上的ruby很新。我有表格
<%= form_tag do %>
<%= text_field_tag :fullname, params[:fullname], placeholder: 'fullname' %>
.
.
.
<a href="/userEdit"> <%= submit_tag "save" %> </a>
<% end %>
这些表格是更新模型数据。在我的控制器中我有
def updateUser
user = Users.find(session[:user_id])
user.fullname = params[:fullname]
user.save
render 'profile'
end
它不起作用(数据没有更新),但是当我尝试
时def updateUser
user = Users.find(session[:user_id])
user.fullname = 'david'
user.save
render 'profile'
end
它正在运行(数据已更新)。我不知道哪里出错了,请帮助我。很抱歉提出这么简单的问题,我是Ruby的新手(Rails也是如此),我搜索过但没有得到合适的答案。谢谢
答案 0 :(得分:3)
我对铁轨上的红宝石很新
欢迎 - 让我给你一些想法!
-
<强>表格强>
首先,您的form_tag
未正确创建。你需要在这里放一条路线(所以它知道在哪里提交数据):
<%= form_tag your_path_here do %>
这适用于form_tag
帮助器,但是,当您正在编辑对象时,您可能会更好地使用form_for
帮助程序 - 它需要一个实际对象(值):
<%= form_for @user do |f| %>
<%= f.text_field :full_name %>
<%= f.submit "Submit" %>
<% end %>
这种类型的表单有与Rails的resourceful
结构一起使用,这是我的第二点......
-
<强>资源强>
Rails是围绕resourceful
基础架构(每个数据对象都是resource
)的想法构建的。如果您要更新/修改对象,典型的解释是您要编辑resource
,因此需要使用rails
&#39; resourceful
structure来处理它:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update, :show]
def index
@users = User.all
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
@user.save
end
def edit
end
def update
@user.update(user_params)
end
private
def user_params
params.require(:user).permit(:fullname, :etc)
end
def set_user
@user = User.find params[:id]
end
end
这将允许您为此定义resourceful
routes:
#config/routes.rb
resources :users
将此设置与form_for
一起使用将对您有用
答案 1 :(得分:0)
一开始没注意到。你的表格不正确。您没有指定操作的网址,并且您将提交标记放在链接中,因此基本上您的链接被调用而不是您提交的表单。
<%= form_tag '/userEdit' do %>
<%= text_field_tag :fullname, params[:fullname], placeholder: 'fullname' %>
.
.
.
<%= submit_tag "save" %>
<% end %>
确保您已为userEdit post方法指定了路由。