2014-06-25 30 views
0

Iam新增了导轨,我的表单中有一个图像字段。但我没有把它当作强制性领域。但是,当我尝试绕过它并提交表单时,它显示一个错误。我在下面发布我的错误。如何将照片字段设置为非必填

当我添加如果PARAMS [:联系人] & & PARAMS [:联系人] [:照片] IAM越来越错误,那是因为它试图访问的散列里面是空的,以避免我已经添加PARAMS [:接触] [:相片] .original_filename = “empty.jpg”,但它也将引发错误

NoMethodError在ContactsController#为零创建 未定义的方法`original_filename”:NilClass

private 
def func 
    name=params[:contact][:photo].original_filename 
    directory= "public/data" 
    return path = File.join(directory,name)            end           

类型错误在ContactsController#创建 无隐式转换o f无字符串

def contact_params 
    File.open(func,"wb") { |f| f.write(params[:contact][:photo].read) } 
    params.require(:contact).permit(:firstname, :lastname, :gender, :email_id, :mobile_number, :address) 
end 

感谢您的耐心等待。

+0

检查你的参数,看看传递给控制器​​什么是 – Rafal

回答

0

检查params[:contact][:photo]是否在尝试访问它之前实际传递给了您的控制器。

private 
def func 
    if params[:contact] && params[:contact][:photo] 
    name=params[:contact][:photo].original_filename 
    directory= "public/data" 
    return path = File.join(directory,name) 
    else 
    return nil # or whatever you'd like to return if no filename is passed 
    end 
end 

我建议更多的信息,检查出Action Controller Rails Guide(和一般的Rails Guides)。

+0

感谢您的回复,我已经尝试使用if循环,正如您所提到的,但它会引发错误。发布下面我的错误,我想用一个空白接触式图像柜面不提供图像,我已经尝试过,但在ContactsController#它不工作类型错误创建 的零的隐式转换成字符串 \t 高清contact_params \t \t File.open(func,“wb”){| f | f.write(params [:contact] [:photo] .read)} \t \t params.require(:contact).permit(:firstname,:lastname,:gender,:email_id,:mobile_number,:address) \t end end – Jazmin

+0

这是一个完全不同的问题,因为它看起来像是错误在你的'create'方法中。您能否将您的'create'和'contact_params'方法添加到您的问题中? [:接触] [:相片] –

+0

,以下 DEF创建 \t \t接触= Contact.new(contact_params) \t \t名=参数荫张贴.original_filename \t \t如果contact.save \t \t \t接触。更新(:照片=>名称) \t \t \t redirect_to的@contact \t \t其他 \t \t \t呈现 '新' \t \t年底 \t年底 高清contact_params \t \t File.open(FUNC,“WB “){| f | f.write(params [:contact] [:photo] .read)} \t \t params.require(:contact).permit(:firstname,:lastname,:gender,:email_id,:mobile_number,:address) \t结束 – Jazmin