我有一个数据库,其格式为(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 %>
在同一页面上,但我不确定如何实现这一点,因为我没有预先存在的活动记录模型可供参考。到目前为止,我已经编写了以下代码,但表单不起作用,因为当我按提交时没有任何反应。
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
和我的#34;包装模型&#34;
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
实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
您尚未在form_tag中指定要提交的表单的有效网址。鉴于您的代码看起来像一个宁静的控制器,我假设您的 routes.rb 文件中有resources :pages
,因此您需要执行类似form_tag "/pages/1", method: "get" do
的操作,以便路由能够匹配。
我建议创建一个更适合命名的资源,并使用像 index 这样的“集合”路由,而不是像 show 这样的“成员”路由。或者向其添加额外的收集路由,以响应 POST 请求。
或者,您可以创建一个单一资源。
但是,在您将数据提交给控制器后,您的代码将无法满足您的预期,因为您在重定向后会丢失@left
数据。如果您打算显示数据,则需要在那里渲染视图。最简单的方法是使用new
和create
操作创建新资源。新操作会保留您的表单并提交给创建操作,该操作只是在create.html.erb
模板中显示结果,您不应该重定向到其他位置。您可以在Rails Guides