在Rails 4.0 Ruby 2.0中,没有从表单_返回结果

在Rails 4.0 Ruby 2.0中,没有从表单_返回结果,ruby,ruby-on-rails-4,form-for,Ruby,Ruby On Rails 4,Form For,我正在尝试在我的rails应用程序中做一个测试,我已经环顾了四周,唯一一个看起来像它做了我想要的事情的gem是调查,但它还没有为Rails4做好准备。无论如何,我借用了《调查宝石》所创造的结构。所以我有尝试、调查、问题和答案 我的问题是,当我试图将选择的答案传递给尝试控制器时,我不确定。我还是rails新手,所以这可能是我正在做/没有做的事情 景色是这样的 编辑:以html格式添加 你发布的HTML确实清楚地表明,这里正在发生一些非railsish的事情。如果您以这样的方式调用form_for-

我正在尝试在我的rails应用程序中做一个测试,我已经环顾了四周,唯一一个看起来像它做了我想要的事情的gem是调查,但它还没有为Rails4做好准备。无论如何,我借用了《调查宝石》所创造的结构。所以我有尝试、调查、问题和答案

我的问题是,当我试图将选择的答案传递给尝试控制器时,我不确定。我还是rails新手,所以这可能是我正在做/没有做的事情

景色是这样的 编辑:以html格式添加
你发布的HTML确实清楚地表明,这里正在发生一些非railsish的事情。如果您以这样的方式调用form_for-helper方法,它将创建一个FormBuilder对象,该对象将构建实际的表单,因此我们必须检查Rubyspeak中FormBuilder类中单选按钮的参数,这也可能是。我们在那里找到了

radio_button(method, tag_value, options = {})
因此rails所期望的方法的三个参数是表单应该操作的对象的方法的名称,在您的情况下,该对象将是您的尝试。new对象。此时要传递的最常见的东西是一个带有方法名的符号,但正如您所提供的问题一样,rails试图原谅并将传递的内容转换为字符串,可能使用to_s方法。由于您似乎没有在您的问题类中实现to_s,因此Object的默认实现将在尖括号中提供对您的对象的描述以及类名和地址。由于尖括号会混淆HTML解析器,因此这些内容会被轻轻转义,最终导致输入元素的id和名称属性混乱。当HTTP POST请求被传回并最终得到所发布的内容时,这肯定会混淆rails参数解析器


在不了解更多模型类的情况下,如何解决这个问题并不明显,但很可能您希望使用嵌套表单以正确的方式解决这个问题。这不是我可以从头开始做的事情,但您可以查看这一点以了解更多信息。

在创建时在AttemptsConroller中创建一个尝试实例变量:

def new
  @attempt = Attempt.new
end
在您的视图中,使用刚刚创建的实例:

<%= form_for(@attempt) do |f| %>

如果我没有完全忽略手头的问题,这应该可以解决问题。

这看起来不是一个好的rails视图,视图和控制器之间没有绑定变量,应在控制器方法上将trunt.new定义为实例变量,例如@trunt@survey=survey.find1也应在控制器中,即使看起来像wrong@bjhaid我知道@survey=survey.find1不应该在那里,我只是想做一个PoC,所以它是硬编码的。我可以问一下在视图和控制器之间绑定变量是什么意思吗?对不起,我还是新的RoR。您提供的代码不足以判断您是否做错了什么。请添加表单_中的HTML,以便我们可以看到请求路由到的操作、字段ID和控制器操作。@Patru刚刚为表单_添加了此HTML。forNo,这不是问题,这是因为当我尝试从页面输入值时,它没有返回参数中的任何值。在再次阅读您的代码后,我还有两个问题:模型-您确定要尝试进行多次调查,而不是尝试进行多次调查吗?b在表单中,您仅为尝试创建表单,但不使用该变量。而是查找调查并从调查属性创建表格。由于您没有以任何方式更改新的尝试实例,因此它被正确地返回为尝试=>{}。
radio_button(method, tag_value, options = {})
def new
  @attempt = Attempt.new
end
<%= form_for(@attempt) do |f| %>