社区首页 >问答首页 >在控制器中使用for循环同时创建多个对象

在控制器中使用for循环同时创建多个对象
EN

Stack Overflow用户
提问于 2014-06-10 09:12:40
回答 2查看 1.3K关注 0票数 1

我有一个有一个列的单词模型: word。我有一个表单,它在提交时创建一个@word对象。

words/_form.html.erb

代码语言:javascript
代码运行次数:0
复制
<%= form_for(@word, :remote => (params[:action] == 'new' ? true : false)) do |f| %>
  <fieldset>
    <div class="field">
      <%= f.text_field :word, :required => true %>
    </div>
  </fieldset>

  <div class="actions">
    <%= f.submit :disable_with => 'Submitting...' %>
  </div>
<% end %>

words/create.js.erb

代码语言:javascript
代码运行次数:0
复制
$('#words').prepend( '<%= escape_javascript(render @word) %>' );
$('#new-word-form-container').find('input:not(:submit),select,textarea').val('');

我想简略地说,在一个表单提交时,大量地创建多个单词(即,不必重新提交来创建每个单独的单词)。

我的Word模型中有一个方法,它将字符串拆分为一个单词数组(由逗号或空格分隔)。

代码语言:javascript
代码运行次数:0
复制
class Word < ActiveRecord::Base

attr_accessible :word

  # Split Words method splits words seperated by a comma or space
  def self.split_words(word)
    # Determine if multiple words
    if word.match(/[\s,]+/)
      word = word.split(/[\s,]+/)    # Split and return array of words
    else 
      word = word.split              # String => array 
    end 
  end

end

我试图在我的create操作中使用一个for循环来逐步遍历每个数组元素,并为该元素创建一个@word对象。

代码语言:javascript
代码运行次数:0
复制
class WordsController < ApplicationController
respond_to :js, :json, :html

def create
  split = Word.split_words(params[:word])

  split.each do |w|
    @word = Word.create(params[:w])
    respond_with(@word)
  end
end

我目前正在得到一个HashWithIndifferentAccess错误,如下所示。

代码语言:javascript
代码运行次数:0
复制
Started POST "/words" for 127.0.0.1 at 2014-06-10 13:09:26 -0400
    Processing by WordsController#create as JS
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"0hOmyrQfFWHRkBt8hYs7zKuHjCwYhYdv444Zl+GWzEA=", "word"=>{"word"=>"stack, overflow"}, "commit"=>"Create Word"}
    Completed 500 Internal Server Error in 0ms

    NoMethodError (undefined method `match' for {"word"=>"stack, overflow"}:ActiveSupport::HashWithIndifferentAccess):
      app/models/word.rb:9:in `split_words'
      app/controllers/words_controller.rb:36:in `create'

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-10 11:10:27

在words控制器中的create操作中,从params中获取单词,这给您返回了一个parameter对象。parameter对象是一个类似于hash的对象,继承自ActiveSupport::HashWithIndifferentAccess。然后尝试调用parameter对象上的parameter方法,它不知道如何响应它,因此得到了一个NoMethodError

结帐http://api.rubyonrails.org/classes/ActionController/Parameters.html

您需要做的第一件事是传递params[:word][:word]而不是params[:word],这应该会给您返回一个string对象,这个方法现在应该可以工作了。

each循环中,在create中可能会遇到另一个问题,因为params[:w]可能返回nil。相反,您应该传递w,因为这将是您要迭代的array中的每个单词,如果没有弄错,您希望为每个单词创建一个word对象。

代码语言:javascript
代码运行次数:0
复制
def create
 split = Word.split_words(params[:word][:word])

 @words = split.map do |w|
   Word.create(word: w)
 end

 respond_with(@words)
end
票数 2
EN

Stack Overflow用户

发布于 2014-06-10 11:12:11

代码语言:javascript
代码运行次数:0
复制
class WordsController < ApplicationController

  respond_to :js, :json, :html

  def create
    @words = params[:word].split.map { |word| Word.create(word) }
    respond_with(@words)
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24147079

复制
相关文章
找到java代码中没有被使用的公用方法
最近,我打算对我们项目的代码进行清理,准备把一些没有被使用到的公用方法清理掉,但是我在网络找了一遍,像PMD,Findbugs等静态工具,都只能找到没有被使用的私有方法。
源哥
2018/08/28
1.6K0
为什么我的HibernateDaoSupport没有注入SessionFactory
1.按理来说Spring应该会通过setSessionFactory方法将SessionFactory注入进来,可是并没有。
用户2032165
2019/04/09
3.1K0
为什么我的HibernateDaoSupport没有注入SessionFactory
MONGODB Sharding 安装 与网上我没有找到的 Answer
本来今天应该是MYSQL的文字,不过最近搞的MONGO比较多,测试MGR 的集群出了问题正在解决,所以今天和明天都是MONGODB 的文字
AustinDatabases
2019/08/30
5390
MONGODB Sharding 安装 与网上我没有找到的 Answer
为什么我的进程被kill掉了
这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试。
KINGYT
2021/08/09
2.4K0
为什么我的进程被kill掉了
Archiva 仓库提示文件没有找到
如果提示的是 404 的话,提示你的 Archiva 在可能的源仓库中已经进行了搜索,但是没有找到。
HoneyMoose
2020/04/13
6550
Archiva 仓库提示文件没有找到
为什么我的进程被kill掉了
这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试。
Linux阅码场
2021/04/22
2.7K0
为什么我的进程被kill掉了
为什么OpenFlow没有被广泛采用?
可操作性与可扩展性问题 OpenFlow的终端用户以及市场人员明确指出其技术问题:操作复杂,很难测试以及扩展。 这不是OpenFlow的核心技术问题,但确是其生态系统中很重要的一部分,像与芯片厂商以
SDNLAB
2018/03/30
1.3K0
为什么OpenFlow没有被广泛采用?
springMVC配置文件失败webapp没有蓝点问题解决
 打开Project Structure,找到我们创建的Module,在该模块目录下右键新建Web框架(已经存在的话删除重新建)。
一个风轻云淡
2022/11/13
5090
springMVC配置文件失败webapp没有蓝点问题解决
[linux][kprobe]谁动了我的文件---使用kprobe找到目标进程
问题场景: 云计算IaaS平台上,经常使用libvirt+qemu-kvm做基础平台。libvirt会在/etc/libvirt/qemu/目录下,保存很多份qemu的配置文件,如ubuntu.xml。 作者发现其中的配置文件会在特定的场景下被修改,却不知道哪个进程是凶手。为了找到凶手,作者写下了这个debug工具。 代码分析: 代码路径:https://github.com/pacepi/whotouchmyfile #include <linux/kernel.h> #include <linux/mo
皮振伟
2018/04/09
2.3K0
idea创建web项目没有webapp_为什么idea创建不了web项目
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/188538.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
1.2K0
idea创建web项目没有webapp_为什么idea创建不了web项目
因为没有网关,我的服务器被 DDoS 了
大家好,我是鸭血粉丝,想起来之前生产发生的事故,阿粉我的内心到现在都还很忐忑不安,今天我们来学习一个 Kong 以及跟你们聊聊做好网关限流控制的重要性。
纯洁的微笑
2020/03/18
1.5K0
因为没有网关,我的服务器被 DDoS 了
作为现代开发的基础,为什么 TDD 没有被广泛采用?
作者 | Buttondown 译者 | Sambodhi 策划 | Tina 测试驱动开发 在 1999 年左右是最前沿的技术,也是现代开发的基础,但为什么直到现在还没有被广泛使用?   “我认为,在我作为一名专业极客的四十二年生涯中,软件行业在历史上始终不能或不愿意掌握和采用测试驱动开发(TDD),这是最令人沮丧和丧气的事件之一。”对于 TDD 没有广泛被应用的问题,GeePaw Hill 发了系列 推文 进行了探讨。他认为问题在于其支持者在组织方面的失败,他们推动得太猛,想将“TDD”转化
深度学习与Python
2023/03/29
5280
作为现代开发的基础,为什么 TDD 没有被广泛采用?
SpringBoot无法访问webapp目录下的文件
  在pom中添加此段 完美解决,代码的作用是让src/main/webapp在编译的时候在resoureces路径下也生成webapp的文件
Arebirth
2020/06/19
2.4K0
为什么没有运营的SaaS没有未来?
来源:大虫运营心经  作者 : 花大虫 ---- 职业生涯前几年一直在做C端互联网相关的工作,这两年突然转做B端了,感受有很大的差异,但是却又有很大的相似性,To C的运营经验对To B的运营有巨大的帮助。越做越觉得To B行业有意思,大有可为。 最近我会把近2年亲身经历的一些To B行业运营经验分享给大家。 万信是我现在创业在做的一家餐饮SaaS公司,后面文章中会有涉及。 ✎✎✎ 大家谈To B都会讲产品、讲销售,很少人会讲到运营。殊不知一个To B产品的运营非常关键,因为这直接决定了一个非常重要
腾讯SaaS加速器
2020/06/09
9520
#PY小贴士# 抓下来的网页为什么没有我要的内容?
现在绝大多数网站的内容并非直接通过你访问的 URL 请求直接返回,而是会通过一种叫做 AJAX 的方法,在页面的基本框架加载完毕后,再通过其他的请求向后台服务器再次请求获取的。这被称作“异步加载”,好处是将动态数据和静态的显示框架相分离,既提高了加载速度、提升用户体验,又方便多平台的接口复用。具体细节我不展开了,你可以网上去按我给到的关键字去搜索相关内容,下次我也会专门发下这方面的讲解文章。
Crossin先生
2019/12/19
2.1K0
#PY小贴士# 抓下来的网页为什么没有我要的内容?
为什么 MyBatis 源码中,没有我那种 if···else
在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。
搜云库技术团队
2023/10/21
1930
为什么 MyBatis 源码中,没有我那种 if···else
为什么 MyBatis 源码中,没有我那种 if···else
在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。
一行Java
2023/09/19
2200
为什么 MyBatis 源码中,没有我那种 if···else
我是怎么找到通用漏洞的
2.然后随便点进去一个模块,发现网站页面域名发生了跳转,直觉告诉我,这波操作一定存在问题。果然,在页面的最底端,发现了某家公司的名字,这应该就是开发商。
Ms08067安全实验室
2020/02/19
1.1K0
我是怎么找到通用漏洞的
CPS推广:为什么我的佣金还没有到账呢
CPS推广奖励的佣金,目前无法直接后台提现,需要在次月月结之后,由财务系统统一打款到银行,即推广者后台所填写的银行账号,一般上月佣金,次月月末到账,具体时间以银行到账为准。
腾讯云-推广奖励
2019/11/28
10.7K0
CPS推广:为什么我的佣金还没有到账呢
点击加载更多

相似问题

html2canvas和jsPDF,css样式呈现错误的pdf格式

13

带有TypeScript的样式化组件的'css‘属性

115

带有CSS边框样式的Chrome呈现问题

10

Angular2如何在typescript中更改css类的样式?

218

使用innerHtml使用angular2呈现CSS

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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