Ruby on rails 在控制器方法之间传递参数的Rails

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

所以我有两页:欢迎和详细信息

在欢迎页面中,我要求用户输入他们的姓名,然后单击一个按钮,将您带到详细信息页面。使用给定名称在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.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放入详细信息获取请求的参数中-我该如何做?