1

ユーザーがフォーム内に URL を入力する必要があります。ただし、URL はデータベースの列ではありません。次のフォームでエラーが発生します。

ビデオを作成するためのフォームがあります (new.html.haml)

= form_for @video do |f|
  .field
  = f.label :title
  = f.text_field :title
.field
  = f.label :description
  = f.text_area :description
.field
  = f.label :url
  = f.text_field :url
.field
  Provider
  %br
  = radio_button :video, :provider, 'vimeo'
  = f.label :provider, 'Vimeo', :value => 'vimeo'
  %br
  = radio_button :video, :provider, 'youtube' 
  = f.label :provider, 'Youtube', :value => 'youtube'
%br
.actions
  = f.submit "Add video"

Rails は、URL が不明なメソッドまたは変数の URL の列ではないことを訴えます。

私がしたいこと

基本的に、ユーザーが追加しようとしているビデオの URL と、ビデオのタイトル、説明、およびプロバイダーを取得する必要があります。

すべてのフィールドにはデータベースに列がありますが、URL だけにはありません。

次に、URL をフォーマットして、いくつかのメソッドを呼び出す必要があります。データベースに保存する新しい出力が作成されます。

したがって、URL から、データベース列provider_video_idである を取得します。thumb

**専用のデータベース列を使用せずにフォームでユーザー URL を受け取るにはどうすればよいですか?

4

3 に答える 3

1

仮想属性を使用する必要があります。

モデルに次のようなものを入れます。

def url=(url)
  @url = url
end

def url
  @url
end
于 2012-06-29T20:26:03.210 に答える
1

form_tagを使用できます。これはどのオブジェクトにも関連付けられていないため、単純化されていないフォームを持つ理由がある場合はいつでも使用したいものです。たとえば、検索フォームは form_tag を使用しますが、この場合もそうです。

于 2012-06-29T20:26:15.603 に答える
0

Ruby クラスの set/get を使おうとしているので、Ruby にはそのための魔法があります。

これは簡単な方法です

def url=(url)
  @url = url
end

def url
  @url
end

これは魔法のような方法です

attr_accessor :url

このコード行で、コードを DRY します。

于 2018-06-16T02:59:31.690 に答える