所以我有2页:欢迎&的信息。
在欢迎页面中,我要求用户输入他们的名字,然后单击一个按钮,将您带到详细信息页面。使用给定名称在db中创建一个条目。
在详情页面中,我要求年龄和性别。这些细节我在db中更新了上一页中输入的名称。
现在,这是我的两种方法。
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.find_by_id(name_id),而不是使用Names.last。但是如何在这些方法之间传递name_id值?
答案 0 :(得分:2)
更简单的方法是在不依赖嵌套表单的情况下将新记录的id放在详细信息获取请求的参数中。当用户点击详细信息时,他们需要查看其记录的详细信息。
因此,如果你想要名字/:id / details。
,路由可以包含id你的控制器
def new
Names.create(params)
end
def edit
@human = Names.find(params[:id])
#whatever else
end
如果没有ajax,你在这里非常有限。我无法生成整个视图代码,但如果您有两个创建新记录的视图和另一个编辑其详细信息的视图,那么您将走上正确的轨道。
这里更常见的模式是new / edit而不是new / details。
所以在你的路线文件中你只需要做资源:名字。这将创建7条宁静的路线。 请在此处阅读http://guides.rubyonrails.org/routing.html#singular-resources。
对于你的第一天铁轨,你已经掌握了基础知识,遵循这种模式将对你有所帮助。
答案 1 :(得分:1)
您可以在欢迎视图表单中使用hidden_field:
# 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
答案 2 :(得分:1)
有几种方法可以解决这个问题,但一个相当简单的方法是通过会话变量传递自动生成的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