Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 没有活动记录模型且显示先前存在的数据库数据的窗体_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 没有活动记录模型且显示先前存在的数据库数据的窗体

Ruby on rails 没有活动记录模型且显示先前存在的数据库数据的窗体,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个数据库,数据格式为(country,LEmale,LEfemale)LE=预期寿命,我想向提交此表单的用户显示此数据: <%= form_tag "pages#show" do %> <%= radio_button_tag(:sex, "male") %> <%= label_tag(:male, "I am male") %> <%= radio_button_tag(:sex, "female") %> <%=

我有一个数据库,数据格式为(country,LEmale,LEfemale)LE=预期寿命,我想向提交此表单的用户显示此数据:

<%= form_tag "pages#show" do %>
  <%= radio_button_tag(:sex, "male") %>
  <%= label_tag(:male, "I am male") %>
  <%= radio_button_tag(:sex, "female") %>
  <%= label_tag(:female, "I am female") %>
  <br>
  <%= label_tag(:country, "Country:") %>
  <%= text_field_tag(:country) %>
  <br>
  <%= number_field_tag 'age', nil, in: 10...110 %>
  <%= submit_tag("Submit", :id => 'submit')  %>
<% end %>



“提交”)%%>
在同一页上,但我不确定如何实现这一点,因为我没有预先存在的活动记录模型可供参考。到目前为止,我已经编写了以下代码,但是表单不起作用,因为当我按下submit时什么也没有发生

class PagesController < ApplicationController
  def index
  end

  def show
    @sex = params[:sex]
    @country = params[:country]
    @age = params[:age].to_i    
    @left = Country.new.time_left(@country, @sex, @age)
    redirect_to index
  end
end
class PagesController
还有我的“包装模型”

class Country

实现这一目标的最佳方式是什么

您尚未在表单标签中为表单指定要提交到的有效url。鉴于您的代码看起来像一个restful控制器,我假设您的routes.rb文件中有一个
resources:pages
,因此您需要执行类似
form_tag”/pages/1的操作,方法:“get”do
,以便匹配路由

我建议创建一个更合适的命名资源,并使用类似“集合”路由的索引,而不是类似“成员”路由的show。或者向其添加一个额外的收集路由,以响应POST请求

或者,您也可以创建单个资源


但是,一旦您将数据提交给控制器,您的原样代码就不会达到预期效果,因为在执行重定向后,您将丢失
@left
数据。如果计划显示数据,则需要在那里渲染视图。最简单的方法是使用
new
create
操作创建新资源。新操作保存您的表单并提交给create操作,该操作仅在
create.html.erb
模板中显示结果,您不应该重定向到其他地方。您可以在

中找到有关请求/响应周期的更多信息,您希望如何在没有模型的情况下提取数据库数据?我使用国家/地区模型作为包装器模型
class Country < ActiveRecord::Base

  def time_left(country, sex, age)
    data = Country.find(country)
    sex == "male" ? expected = data.male.to_i : expected = data.female.to_i
    left = expected - age
  end  
end