0

これはやや単純なはずですが、関連付けを把握することはできません。

nested_form と paperclip を使用しています。すべての画像と投稿モデルを保存するための写真というモデルがあります。関連する投稿に関連付けられている写真を表示しようとしていますが、ビューをレンダリングするときに「未定義のメソッド アバター」が表示されます。

class Post < ActiveRecord::Base
has_many :photos, :dependent => :destroy
accepts_nested_attributes_for :photos
attr_accessible :title, :comments, :photo_id, :avatar, :photos_attributes
end

Class Photo < ActiveRecord::Base
belongs_to :post
attr_accessible :avatar, :post_id
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end

コントローラ

def new
@post = Post.new
@post.photos.build
end

だから私は、投稿が作成されると、投稿と写真モデルの間の関連付けが行われるという印象を受けていますか? そうですか?

したがって、ビューでこれを呼び出すと、未定義のメソッドが取得されます。どこが間違っているのか誰でもアドバイスできますか

<% @posts.each do |f| %>
<ul>
 <li><%= f.title %></li>
 <li><%= f.department.name %></li>
 <li><%= image_tag f.avatar.url(:thumb) %></li>
 <li><%= link_to "Delete Post", post_path(f.id), :confirm => "Are you sure?", :method => :delete %></li>
</ul>
<% end %>

私が試してみました

<%= image_tag f.photo.avatar.url(:thumb) %>

しかし、それもうまくいきません

4

3 に答える 3

2

写真を間違って作成している可能性があります。

ここで、フォームがどのように見えるかを確認できます:

そしてまたPost has_many :photos、それはそうでなければなりません。お気に入り

<% @posts.each do |f| %>
....


 <% f.photos.each do |photo| %>
   <%= image_tag photo.avatar.url(:thumb) %>
 <% end %>


...
<% end %>
于 2013-02-01T17:27:51.563 に答える
1

ネストされたアトリビュートを扱うときは、3 つの手順に従います。まず、親モデルでは、accepts_nested_attributes_for を使用できます。

Class Post
  has_many :photos, dependent: :destroy
  accepts_nested_attributes_for :photos
  attr_accessible :photos_attributes
end

次に、写真用のネストされたフォームを組み込むことができるため、その特定の投稿の写真の属性を設定できます。

<%= form_for(@post) do |f| %>
  <%= f.fields_for :photos do |p| %>
  ...rest of form here...

3 番目に、投稿モデルの新しいアクションで写真を作成できます。

Class UserController
  def new
    @user = User.new(photos: Photo.new)
  end
end

この最後のステップは重要です。これを行わないと、ユーザー フォームに写真フィールドが表示されません。これらの手順に従うと、ユーザー フォームで写真とユーザーの両方からすべての属性を設定できるはずです。

于 2013-02-01T19:47:30.817 に答える
0

postコントローラでは、最初に、関連付けているオブジェクトを定義する必要があると思います。

 def new
   @post = Post.find(params[:post_id]
   @photo = @post.photos.build

  ....
  end

同じことがのcreateアクションにもありPhotosControllerます。

于 2013-02-01T17:24:22.400 に答える