【发布时间】:2013-11-20 08:35:13
【问题描述】:
我在尝试使用 form_for 创建新对象“Investor”时遇到各种错误。
我只用一个属性 (:name) 尽可能简单地设置它,但我认为我没有正确传递参数......或者可能需要在 create.html.rb 文件中定义模板? ...或者应该在 config/routes 中添加一些东西来定义创建的含义,但我不确定解决方案是什么或我做错了什么,尽管它可能是基本的......但我可以似乎没有解决它或找到使用 form_for 创建具有多个参数/参数的新对象的正确方法。我收到错误消息 - Investor/create “模板丢失”,所以我想知道我是否需要创建模板...?
目前我在 def new @investor = Investor.new 中有一个错误,甚至不应该使用它,因为我试图创建一个带参数的对象,而不是没有任何参数的对象,但是当我采取从控制器中取出 def new ,我得到一个完全不同的错误,说在 form_for 行“表单中的第一个参数不能为 nil 或空”中有一个 argumentError (rb:10) 这是我之前遇到的错误之一,所以我'开始觉得我在旋转我的轮子,但是当我按照示例进行操作时,我遇到了错误,所以也许有更多经验的人可以指出我的错误。
否则,当我像 Investor.new(:name) 或“name”一样发送它时,我会收到一个缺少的 stringify_method 错误,所以我遇到的问题可能是我不知道传递多个参数的正确方法在控制器中,但即使我尝试只用一个来做这件事,按照我设置的方式创建一个新的 Investor 对象似乎仍然存在问题。有任何想法吗?
哪个更正确/有什么区别?: def create Investor.create(params[]) end def create Investor.new(params[]) end
我找不到任何简单的示例来说明如何使用控制器和模型来使用 form_for 创建对象。本教程展示了如何创建用户对象的简单示例,但我认为当您首先生成用户模型以创建迁移然后使用 form_for 创建新用户、投资者或任何对象的对象时,过程和语法有点不同其他实体。
在线示例中似乎遗漏了许多细节,因为显然有许多不同的方法可以做到这一点(教程使用(名称,选项{})作为一个示例,其他示例使用 args*),好吧,我可以使用我创建的这个按比例缩小的简单示例无法使其正常工作,所以我想我会把它贴在这里寻求帮助。
谢谢! 卡梅隆
控制器:
class InvestorsController < ApplicationController
respond_to :html
def new
@investor = Investor.new
end
def create
@investor = Investor.create(investor_params)
end
def investor_params
allow = [:name]
params.require(investor).permit(allow)
end
end
型号:
class Investor < ActiveRecord::Base
include ActiveModel::Validations
attr_accessor :name
validates :name, presence: true
end
end
<%= form_for @investor do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.submit "Create my account" %>
<% end %>
路线:
Tycoon::Application.routes.draw do
resources :investors, only: [:new,:create]
root 'static_pages#home'
match '/help', to: 'static_pages#help', via: 'get'
match '/investors/new', to: 'investors#new', via: 'get'
match '/about', to: 'static_pages#about', via: 'get'
match '/contact', to: 'static_pages#contact', via: 'get'
get "static_pages/home"
【问题讨论】:
标签: ruby-on-rails ruby model form-for