2013-03-12 21 views
0

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

控制器:

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 

回答

2

你应该把它写在你的创建操作,没有在新

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

+0

谢谢Zippie。当我尝试这个时遇到一个奇怪的错误。 SQLite3 :: BusyException:数据库被锁定:INSERT INTO“companies”(“created_at”,“description”,“name”,“updated_at”)VALUES(?,?,?,?) – Jason 2013-03-12 17:41:29

+2

@Jason可能意味着别的是使用它....或许''轨道控制台或SQLite数据库浏览器,我猜 – varatis 2013-03-12 17:44:38

+1

是的,这是别的,看看第二个答案在这里,它帮助我一次:http://stackoverflow.com/questions/ 78801/sqlite3busyexception – Zippie 2013-03-12 17:45:40

相关问题