【问题标题】:Rails - Most efficient way to save multiple params?Rails - 保存多个参数的最有效方法?
【发布时间】:2013-02-28 08:56:04
【问题描述】:

有没有更有效的方法来编写这个控制器代码?这会处理一个传递名称和描述字段的表单,然后将其保存在我的模型中。我想知道是否有一种方法可以一次传递所有参数,而不是指定每个参数,只要它们与我模型中的列匹配。感谢您的帮助!

控制器:

def new
   @new_company = Company.new
   @new_company.name = params[:name]
   @new_company.description = params[:description]
   @new_company.save
end

查看:

<form action="/checklist/new" method="post">

  <label>Company Name</label>
  <input type="text" name="name"/>

  <label>Company Description</label>
  <input type="text" name="description"/>

  <button type="submit">Submit</button>

</form>

型号:

class Company < ActiveRecord::Base
  attr_accessible :description, :name
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 forms


    【解决方案1】:

    你应该把它写在你的 CREATE 动作中,而不是在 NEW 中

    def create
       @company = Company.new(params[:company])
       @company.save
    end
    

    新的应该是这样的:

       def new
          @company = Company.new    
       end
    

    另外,不要为表单编写 html,而是使用 Rails 方式:

    <%= form_for(@company) do |f| %>
    
      <%= f.label :name , "Company Name" %>
      <%= f.text_field :name %>
    
      <%= f.label :description, "Company Description"%>
      <%= f.text_field :description %>
    
      <%= f.submit "Submit"%>
    <% end %>
    

    为了更好地理解所有内容,我建议您阅读这本书: http://ruby.railstutorial.org/ 或这个简短的教程: http://railsforzombies.org/levels/1

    【讨论】:

    • 感谢 Zippie。当我尝试这个时,我遇到了一个奇怪的错误。 SQLite3::BusyException: 数据库被锁定: INSERT INTO "companies" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?)
    • @Jason 这可能意味着其他人正在使用它.... rails console 也许是 SQLite 数据库浏览器,我猜
    • 是的,是别的,看这里的第二个答案,它帮助了我一次:stackoverflow.com/questions/78801/sqlite3busyexception
    • 你是对的,它是浏览器。以前从来没有遇到过,谢谢。它现在向我抛出了一个由新表单代码的第一行引起的未定义方法“model_name”,但我会四处搜索,看看我能想出什么来解决这个问题。感谢您的回答。
    • 在您的控制器中将 @new_company 替换为 @company。名称必须与表单匹配。
    猜你喜欢
    • 2015-11-12
    • 2021-09-27
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多