Ruby on rails 在控制器方法之间传递参数的Rails
所以我有两页:欢迎和详细信息 在欢迎页面中,我要求用户输入他们的姓名,然后单击一个按钮,将您带到详细信息页面。使用给定名称在db中创建一个条目 在详细信息页面中,我询问年龄和性别。我将根据上一页中输入的名称在db中更新这些详细信息 现在,这是我的两种方法Ruby on rails 在控制器方法之间传递参数的Rails,ruby-on-rails,ruby,Ruby On Rails,Ruby,所以我有两页:欢迎和详细信息 在欢迎页面中,我要求用户输入他们的姓名,然后单击一个按钮,将您带到详细信息页面。使用给定名称在db中创建一个条目 在详细信息页面中,我询问年龄和性别。我将根据上一页中输入的名称在db中更新这些详细信息 现在,这是我的两种方法 def welcome @name = params[:name] if @fname then @record= Names.create({:name => @name}) end en
def welcome
@name = params[:name]
if @fname
then @record= Names.create({:name => @name})
end
end
def details
@human=Names.last
@human.update_attributes({:age=> params[:age], :gender=> params[:gender]})
end
现在,在上面的代码中,不是使用Names.last,而是使用Names.find\u by\u idname\u id。但是如何在这些方法之间传递name\u id值呢?在不依赖嵌套表单的情况下,更简单的方法是将新记录的id放入detail get请求的参数中。当用户单击详细信息时,他们需要查看记录的详细信息 因此,如果您想要名称/:id/详细信息,那么路由可以包含id 你的控制器
def new
Names.create(params)
end
def edit
@human = Names.find(params[:id])
#whatever else
end
如果没有ajax,您在这里会受到很大的限制。我无法生成完整的视图代码,但是如果您有两个视图,一个用于创建新记录,另一个用于编辑其详细信息,那么您将走上正确的道路
这里更常见的模式是new/edit,而不是new/details
因此,在路由文件中,只需执行资源:名称。这将创建7条restful路由。
请在这里阅读
对于rails的第一天,您已经掌握了基本知识,遵循此模式将对您大有帮助。您可以在欢迎视图表单中使用隐藏的\u字段:
# views/.../welcome.html.erb
<%= form_for @user, action: :details, ...%>
...
<%= f.hidden_field :name_id, value: @record.id %>
<% end %>
# users_controller.rb
def details
@human = Names.find(params[:name_id])
...
end
解决这个问题有几种方法,但一种相当简单的方法是通过会话变量传递自动生成的id,例如
def welcome
@name = params[:name]
if @name
@record= Names.create({:name => @name})
session[:id] = @record.id
end
end
def details
@id = session[:id]
@human = Names.find_by_id(@id)
end
我的建议是使用嵌套的表单,而不是使用这种方法。有一个很好的教程。为什么你不能用一种形式自己做呢?如果确实有必要,那么您必须发布视图代码,让我们看看发生了什么。您可以为控制器、路由或视图提供snippet.snippet吗?可能为所有3个提供snippet。我明白你的意思。但我真的不知道该怎么做。这是我使用rails的第一天。如果您对答案满意,请绿色检查我。我想我了解了大部分内容,除了-将新记录的id放入详细信息获取请求的参数中-我该如何做?