首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在rails简单表单中嵌入/嵌套多个表单的最佳方法是什么?

在rails简单表单中嵌入/嵌套多个表单的最佳方法是什么?
EN

Stack Overflow用户
提问于 2014-09-16 02:55:19
回答 1查看 997关注 0票数 0

我有一组模型,它们做以下工作:

1)画廊有许多图像,属于一本书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
belongs_to :books
has_many :images
accepts_nested_attributes_for :books
accepts_nested_attributes_for :images, :allow_destroy => true

//图片库控制器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 class GalleriesController < ApplicationController
  before_action :set_gallery, only: [:show, :edit, :update, :destroy]

  def index
    @galleries = Gallery.all
  end

  def show
  end

  def new
    @gallery = Gallery.new
  end

  def edit
  end
  def create
    @gallery = Gallery.new(gallery_params)
  end

  def update
  end

  def destroy
    @gallery.destroy
  end

  private
    def set_gallery
      @gallery = Gallery.find(params[:id])
    end
    def gallery_params
      params.require(:gallery).permit(:name, :book_id)
    end
end

2)图片属于画廊

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
belongs_to :gallery
    has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
    validates_attachment_content_type :file, :content_type => /\Aimage\/.*\Z/

//图像控制器

3)一本书只有一个画廊

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
belongs_to :author
has_one :gallery

accepts_nested_attributes_for :author
accepts_nested_attributes_for :gallery

Gemfile:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gem 'simple_form'
gem 'nested_form'

在图片库的表单中,我得到了simple_fields_for,并在其中生成了表单字段,以便图像上传,因为创建库需要多个数量,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= simple_form_for(@gallery, html: { multipart: true }) do |f| %>
  <%= f.error_notification %>

  <div class="inputs">
    <%= f.input :name %>
    <%= f.input :book_id %>
    <%= f.simple_fields_for :image do |a| %>
        <%#= f.input :picture %>
        <%#= a.file_field :file %>
        <%= f.input_field :file, as: :file, multiple: true, name: 'gallery[image]' %>
    <% end %>
  </div>

  <div class="actions">
    <%= f.button :submit %>
  </div>
<% end %>

然后,在我的书形式,我创造了一本书,我有一个形式,我想嵌套画廊形式,所以我可以添加一个画廊为每一本书的创作。由于某些原因,它似乎不起作用,我不断地犯错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
undefined method `simple_nested_form_for' for #<SimpleForm::FormBuilder:0x00000104d52640

表格在下面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= simple_form_for(@book, :html => { :multipart => true }) do |f| %>    
<%= f.simple_nested_form_for (@gallery) do |t| %>
    <%= t.simple_fields_for :gallery do |t| %>
    <%= render 'galleries/form' %>
    <% end %>
    <% end %>
<% end %>

这些错误似乎是由于它找不到那个方法造成的,我已经重新启动了服务器两次,但仍然得到了相同的错误。

我遇到的问题是把画廊放在书里面,这样我就可以创作这本书了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-16 04:30:16

您正在尝试将表单包含在表单中。也就是说,你的<%= simple_form_for(@gallery, html: { multipart: true }) do |f| %><%= simple_form_for(@book, :html => { :multipart => true }) do |f| %>下面。

您应该一次只有一个表单实例。其他的应该像<%= t.simple_fields_for :xyz do |t| %>

因此,从您的图库表单中删除<%= simple_form_for(@gallery, html: { multipart: true }) do |f| %>。如果您需要任何其他帮助,您可以跟踪ryan栏杆的嵌套表单。http://railscasts.com/episodes/196-nested-model-form-part-1 & http://railscasts.com/episodes/197-nested-model-form-part-2 .

对于嵌套模式下的简单表单,请遵循form/wiki/Nested-Models

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

https://stackoverflow.com/questions/25866911

复制
相关文章
CSV逗号分隔值格式文件(示例分析)
CSV全称Comma Separated Values是"逗号分隔值"的英文缩写.通常是纯文本文件,可以被文本编辑软件,Excel或WPS表格打开. 基本规则 开头不留空,以行为单位; 列名(标题)放在第一行(可忽略不加列名); 每一行数据以换行结束,无空行; 以半角逗号作分隔符,列为空也要表达其存在; 列内容如存在半角逗号则用半角引号("")将该字段值包含起来; 列内容如存在半角引号则需要使用半角双引号("")转义,并用半角引号("")将该字段值包含起来; 文件读写时引号,逗号操作规则互逆; 内码格式不限
Qt君
2019/07/15
3.5K0
SQL 将一个字段内用逗号分隔的内容分成多条记录
本文转http://www.mhzg.net/a/20117/2011789260293.html
跟着阿笨一起玩NET
2018/09/18
4.5K0
django 获取post传递的值
django 中post方法传值,用普通的request.POST.get(‘value’) 是没法正常接收到前端传递过来的值的
kirin
2020/07/14
3.9K0
LINQ to XML 从逗号分隔值 (CSV) 文件生成 XML 文件
参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx
跟着阿笨一起玩NET
2018/09/19
2.6K0
python用 GET,POST,PUT
、JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。 二、HTTP的请求方法 HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式: . OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。                    也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。 . HEAD    - 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。                 这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 . GET     - 向特定的资源发出请求。                 注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。                 其中一个原因是GET可能会被网络蜘蛛等随意访问。 . POST    - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。                 数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 . PUT     - 向指定资源位置上传其最新内容。 . DELETE  - 请求服务器删除Request-URI所标识的资源。 . TRACE   - 回显服务器收到的请求,主要用于测试或诊断。 . CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 . PATCH   - 用来将局部修改应用于某一资源,添加于规范RFC5789。 其中,GET,POST, PUT, DELETE常用于RESTful API的实现,所以下面做的代码实现 三、Python实现的json数据以HTTP GET,POST,PUT,DELETE方式进行页面请求
py3study
2020/01/06
2.6K0
ThreadLocal 线程内取不到值
在拦截器里, 从 request 请求里拿出了一些数据例如用户id啥的, 存储到了 ThreadLocal 里, 在后面具体的业务处理中, 从 ThreadLocal 却里取不到值
芥末鱿鱼
2022/05/05
1.5K0
逗号运算符和逗号表达式
C语言提供一种特殊的运算符。用它将两个(或多个)表达式连接起来。 如 3+5,6+8 上式称为逗号表达式。逗号表达式的一般形式为 表达式1,表达式2
Twcat_tree
2022/11/30
1.2K0
JS 数字,金额 用逗号 隔开(数字格式化)
例如:  12345格式化为12,345.00  12345.6格式化为12,345.60  12345.67格式化为 12,345.67  只留两位小数。  回来后写了个格式化函数。可以控制小数位数,自动四舍五入。 代码如下: 
Java架构师必看
2021/05/20
13.6K0
nodejs 用request实现post请求
以下是使用 Node.js 和 Request 模块来实现 POST 请求的示例代码:
用户8703799
2023/05/19
1.4K0
HTTP 协议内常见的post提交数据类型介绍
我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。HTTP 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。
EasyNVR
2020/05/26
9950
postfix邮箱_用post方式发送文件
https://blog.csdn.net/wh211212/article/details/53040620 https://blog.jjonline.cn/linux/185.html
全栈程序员站长
2022/11/09
4110
postfix邮箱_用post方式发送文件
php 字符串打散为数组,用逗号分隔出数组
使用explode可以将一段字符串打散成一个数组,不过,explode使用某个字符打乱,例如以上例子,我在explode圆括号内第一个参数是空格,第二个参数为我们将要打乱的字符串,那么连起来的意思就是把$str字符串通过空格打散成字符。
1_bit
2020/10/23
2.2K0
Shell内值命令之exit「建议收藏」
需求:编写shell脚本使用exit退出,退出时返回一个非0数字状态值,执行脚本文件并打印返回状态值
全栈程序员站长
2022/11/10
6230
列表内数字组合最大值
第一种 import itertools lt = [4, 40, 45, 6, 9, 3, 5, 2, 8] lt2 = map(str, lt) it = itertools.permutations(lt2,len(lt)) # for i in it: # print(i) m = map(lambda x:''.join(x), it) # for i in m: # print(i) print(max(m)) # print(m, type(m)) 第二种 lt = [4,
py3study
2020/01/17
8490
SQL如何将一个列中值内的逗号分割成另一列
例如某个列是这样的: 7890 – 20th Ave E Apt 2A, Seattle, VA 9012 W Capital Way, Tacoma, CA 5678 Old Redmond Rd, Fletcher, OK 3456 Coventry House Miner Rd, Richmond, TX
繁华是客
2023/03/03
1.8K0
自适应的逗号
>>> name = [ 'python', 'java', 'javascript' # 缺少逗号 'hello' ] >>> names ['python','java','javascripthello'] >>> my_str = ( 'This is a super long string' 'across multiple lines' 'no backslash characters' ) >>> my_str 'This is a
TalkPython
2019/06/11
1.2K0
C++:统计字符串内大小写字母,数字空格,逗号等
川川好久没发文了,最近实在太忙,要是感兴趣可以直接跟我私聊, QQ:2835809579
川川菜鸟
2021/10/18
9500
北京这两天为啥颜值爆表?
转自|中国天气网 微信|chinaweathernews 作者|朱茵 北京这几天的天空美疯了,无比透亮的蓝天上,漂浮着棉花糖般的云朵,随便一抬头,就是一幅当年windows XP里的风景桌面啊!如此美景,让网友拍照片都拍到手软了,路上处处都是举着手机对着天空各种啪啪啪啪啪的人,还有人调侃,要是把朋友圈里晒的图都拼起来,都能数出整个帝都有几朵云! 为啥这几天颜值如此爆表? 两个字——北风。 因为这两天北京在刮水汽少、干燥的北风,刮走了所有干扰你视线的东西,所以天空透明度高,天蓝得可以溺死你。 好了,不太在乎原
大数据文摘
2018/05/21
5830
PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
枕边书
2018/01/04
1.9K0
PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
点击加载更多

相似问题

用C语言进行串行通信

22

用USB到串行设备和controlTransfers的Android通信

11

UBUNTU C的USB到串行通信问题

11

通过USB集线器进行Android USB主机串行通信

226

C#串行通信

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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