首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在应用程序中传递params到新视图?

如何在应用程序中传递params到新视图?
EN

Stack Overflow用户
提问于 2015-05-17 14:47:26
回答 2查看 3.9K关注 0票数 0

我试着做一个简单的应用程序。我将我的名字和姓氏输入到简单的<%= form_for @data do |f| %> rails表单中,提交之后,应用程序应该像这样呈现简单的文本。My first name is <%= data.first_name %> and my last name is <%= data.last_name %>。我不知道为什么,但我的应用程序说的是这个错误:

未定义局部变量或方法“数据”

它可能是这么说的,因为没有传递参数来查看。

这是我的密码。

routes.rb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resources :data, only: [:new, :create, :index]

data_controller.rb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DataController < ApplicationController

  def new
    @data = Data.new
  end

  def index
  end

  def create
    @data = Data.new(data_params) 

    if @data.valid?
      redirect_to @data
    else
      render :new
    end
  end

  private
    def data_params
      params.require(:data).permit(:first_name, :second_name)
    end
end

/view/data/new.html.erb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= form_for @data do |f| %>

    <%= f.label :first_name %>
    <%= f.text_field :first_name %>

    <%= f.label :second_name %>
    <%= f.text_field :second_name %>

    <%= f.submit 'Continue', class: 'button' %>
<% end %>

/视图/数据/index.html.erb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h2>Coolest app ever :D</h2>
<p>My first name is: <%= data.first_name %>.</p>
<p>And my second name is: <%= data.second_name %>.</p>

/模型/数据b

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Data
  include ActiveModel::Model
  attr_accessor :first_name, :second_name

  validates :first_name, :second_name, presence: true 
end

请帮助找出为什么params不传递到下一页。无论如何,谢谢:D

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-17 14:54:06

您的观点应该如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h2>Coolest app ever :D</h2>
<p>My first name is: <%= @data.first_name %>.</p>
<p>And my second name is: <%= @data.second_name %>.</p>

此外,我建议将模型称为像Data这样的通用模型并不是一种非常Rails-y的方法。一般来说,领域模型对应于现实世界中的事物,比如UserArticle,它们很容易理解和关联。如果您使用需要创建另一个模型并想将其命名为Data2或其他什么的话,它会变得非常混乱:)

票数 1
EN

Stack Overflow用户

发布于 2015-05-17 15:05:05

编辑:

由于您指定不希望使用数据库,我建议通过重定向传递对象参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redirect_to(data_path(data: @data))

在控制器的索引方法中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def index
  @data = Data.new(params[:data])
end

现在您的视图应该正确呈现,因为您将内存中的@data对象属性作为重定向内的参数传递。然后在索引页或希望重定向到的任何地方重新创建此对象。

要扩展Matt的答案,您获得NilClass错误的原因是:

当路由文件中没有启用data#show操作时,您将重定向到show操作。既然您已经为索引设置了视图,那么当@data对象被验证为有效时,我假设您希望重定向到那里:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redirect_to data_path

但是,我建议您遵循Rails约定,并在您的data#show中指定routes.rb路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resources :data, only: [:index, :new, :create, :show]

在你的data_controller.rb中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def show
  @data = Data.find(params[:id])
end

另一个问题是,在创建@data对象时,实际上并没有保存它。new方法填充属性,valid?在定义模型的指定上下文中运行所有验证,如果没有发现错误,则返回true,否则返回false。你想做这样的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def create
  @data = Data.new(data_params) 

  if @data.save
    redirect_to data_path
  else
    render :new
  end
end

使用save尝试将记录保存到数据库,并以任何方式运行验证检查--如果验证失败,保存命令将返回false,记录将不会保存,new模板将被重新呈现。如果正确保存,控制器将重定向到索引页,在该页面中,您可以调用所需的特定数据对象,并在视图中显示它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30292929

复制
相关文章
使用awk打印文件中的字段和列
Awk 自动将提供给它的输入行划分为字段,一个字段可以定义为一组字符,这些字符通过内部字段分隔符与其他字段分开。 如果你熟悉 Unix/Linux 或者做bash shell 编程,那么你应该知道什么是内部字段分隔符 (IFS) 变量是。Awk 中的默认 IFS 是制表符和空格。 Awk: 遇到输入行时,根据定义的IFS,第一组字符为field one,访问时使用 1,第二组字符是字段二,使用访问 2,第三组字符是字段三,使用访问 为了更好地理解这个 awk 字段编辑,让我们看看下面的例子: Exampl
入门笔记
2022/06/02
10K0
习题 9: 打印,打印,打印
Here are the days: Mon Tue Wed Thu Fri Sat Sun Here are the months: Jan Feb Mar Apr May Jun Jul Aug
hankleo
2020/09/16
1.5K0
习题9:打印打印打印
Here are the days: Mon Tue Wed Thu Fri Sat Sun Here are the months: Jan Feb Mar Apr May Jun Jul Aug There's something going on here. With the three double-quotes.
py3study
2018/08/02
1.5K0
习题 8: 打印,打印
1 2 3 4 'one' 'two' 'three' 'four' True False False True '%r %r %r %r' '%r %r %r %r' '%r %r %r %r' '%r %r %r %r' 'I had this thing.' 'That you could type up right.' "But it didn't sing." 'So I said goodnight.'
hankleo
2020/09/16
9820
习题8:打印,打印
1 2 3 4 one two three four True False False True {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} I had this thing. That you could type up right. But it didn't sing. So I said goodnight.
py3study
2018/08/02
7860
web调用打印机自动打印_网页打印如何设置默认打印机
1. 前言 客户对于一些插件比较敏感,如金融、银行等出于安全的考虑和产品的把控,可能不愿意页面打印的时候,客户端浏览器安装插件。(当然,用户有各种各样的需求和打印格式要求,愿意使用打印控件的,开发的打印功能当然很好。) 所以直接使用浏览器自带的打印功能,就成为一个选择。
全栈程序员站长
2022/11/18
6.4K0
用递归打印反向打印链表
之前我们说明过递归的写法 1.列出两数关系公式 2.找出退出条件 要遍历必然有x=x->link; 退出条件是当link=NULL ,相信对你聪明的你来说这很容易理解。 递归代码
用户7272142
2023/10/11
1690
用递归打印反向打印链表
html如何打印_html打印代码
通常在浏览网页的时候,网页上总是出现一些和内容无关的内容,在打印的时候,要是把整个网页都打印下来,总会有些不方便。。。所以在有需要打印的网页上稍微设置一下打印页是很有必要的。。。
全栈程序员站长
2022/09/22
12.6K0
awk 列求和计算
说明: [分隔符]:一般为“\t”制表符,具体视格式而定 [列数]:统计的列数索引,从1开始
莫斯
2020/09/10
1.5K0
打印部分表格(Lodop打印) 原
(adsbygoogle = window.adsbygoogle || []).push({});
tianyawhl
2019/04/04
1.7K0
java链表打印_java链表打印
public static void main(String[] args) {
全栈程序员站长
2022/08/20
1.9K0
用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
数据库中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
全栈程序员站长
2022/07/09
1.7K0
打印菱形Java_for循环打印菱形
1、星号前面的空白要用空格代替。 2、把图形分为上下两部分,分别找出行数与“空格”和“*”的关系
全栈程序员站长
2022/11/11
3K0
打印菱形Java_for循环打印菱形
java打印菱形代码_打印空心菱形
语法格式 for(①初始化部分;②循环条件部分;④迭代部分){ ③循环体部分; }
全栈程序员站长
2022/11/10
2.6K0
java打印菱形代码_打印空心菱形
打印标签时如何解决打印偏移
我们在打印标签时,使用的纸张一般都是不干胶卷纸,这样的卷纸又有单排、双排、三排和四排的规格。这些不同规格的标签纸在条码打印中经常会出现打印偏移的问题,甚至会跳纸,遇到这样的情况该如何调整呢?小编下面详细介绍。
神奇像素科技
2021/11/24
2.3K0
打印标签时如何解决打印偏移
三、python调用打印机,打印文字
参考文章: Tim Golden Python Stuff http://timgolden.me.uk/python/win32_how_do_i/print.html
py3study
2020/01/08
3.9K0
[python]打印对齐
#  %d、%f是占位符 >>> a = 3.1415926 >>> print("%d"%a)    #%d只能输出整数,int类 3 >>> print("%f"%a)  #%f输出浮点数 3.141593 >>> print("%.2f"%a) #按照要求输出小数位数 3.14 >>> print("%.9f"%a)  #如果要求的小数位数过多,后面就用0补全 3.141592600
py3study
2020/01/09
1.9K0
打印流
原有System.out.println 现改为PrintStream类型的实例.println以完成输出到文件
shimeath
2020/07/30
5610
点击加载更多

相似问题

如果与awk匹配,则在awk中打印列,如果不匹配,则仍打印行(不打印该列)。

12

如果匹配,则使用新值的AWK打印字段,否则打印行

14

如果与regex匹配,则使用awk打印列。

14

如果不匹配,则Awk打印

32

awk:如果行以do某事开头,否则打印

350
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文