0

添付ファイルのあるオブジェクトを作成しています。私は実際のフィールド(おそらく私の問題の本当の原因)を分割することによってフィールドを偽造しています。これとは別に、これらは正常に機能しますが、ファイルを添付するときにコントローラーロジックが実行する前に検証が実行されているように見え、次のようなエラーが発生します。

undefined method `match` for nil:Nil at line ...

検証はペーパークリップによってトリガーされますか?どうすればそれをオフにすることができますか、または検証を実行する前に独自のロジックを実行させることができますか?

私のモデルは次のようになります。

attr_accessible :zipcode
has_attached_file :attachment

#this is the line referred to by the error message
validates :zipcode, format: { with: /a_meaningful_regex_here/i}

def initialize
  zipcode = '-'
end
def set_zipcode(params={})
  zipcode = "#{params[:zipcode1]}-#{params[:zipcode2]}"
end
def zipcode1
  zipcode.split('-')[0]
end
def zipcode2
  zipcode.split('-')[1]
end

私のフォームは次のようになります。

<%= form_for @foo do |f| %>
  <%= f.file_field :attachment %>
  <%= text_field_tag  :zipcode1,@foo.zipcode1%> - 
  <%= text_field_tag  :zipcode2,@foo.zipcode2%>
  <%= f.submit %>
<% end %>

私のコントローラーは次のようになります。

def create
  @foo = Foo.new(params[:foo])
  @foo.set_zipcode(params)
  if @foo.save
    redirect_to @foo
  else
    render action: 'new'
  end
end
4

1 に答える 1

0

次のようなものを試してください:

before_validation(:on => :zipcode) { set_zipcode }
于 2013-01-03T18:18:37.203 に答える