您好,我是 ruby on rails 的新手。我这里有表格
<%= form_tag do %>
<%= text_field_tag :fullname, params[:fullname], placeholder: 'fullname' %>
.
.
.
<a href="/userEdit"> <%= submit_tag "save" %> </a>
<% end %>
那些表单是用来更新模型数据的。在我的 Controller 中我有
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 也是),我搜索过但没有得到适合这种情况的答案。谢谢
最佳答案
I'm very new to ruby on rails
欢迎 - 让我给你一些想法!
--
表单
首先,您的 form_tag
未正确创建。您需要在其中放置一条路线(以便它知道在哪里提交数据):
<%= form_tag your_path_here do %>
这是针对 form_tag
助手的,但是,当您编辑对象时,使用 form_for
可能会更好。 helper - 它需要一个实际的对象(值):
<%= form_for @user do |f| %>
<%= f.text_field :full_name %>
<%= f.submit "Submit" %>
<% end %>
这种类型的表单必须与Rails 的resourceful
结构一起使用,这是我的第二点...
--
资源
Rails 是围绕资源丰富
基础架构(其中每个数据对象都是一个资源
)的理念构建的。如果您正在更新/编辑一个对象,典型的解释是您将编辑一个资源
,因此需要使用rails
' 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
一起使用对您有用
关于ruby-on-rails - 从表单值 ruby on rails 更新模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208509/