2013-11-15 54 views
1

請原諒我的無知,但我對RoR相當陌生。我正在開發一個項目,用戶可以複製帖子以編輯這個「克隆版本」並保存它(當然有一個新的帖子ID)。我正在嘗試複製activerecord記錄,但收到NoMethodError - 未定義的方法

首先我試圖用Amoeba gem描述如here,但我失敗了。

後來我想我找到了一個更好的解決方案 - Duplicating a record in Rails 3 - 但是當我整合建議的代碼,我收到以下錯誤:在帖子

NoMethodError#顯示 未定義的方法`clone_post_path」爲#<# :0x0000010267b8c8>

研究和修補現在幾個小時,我真的很感激任何幫助!

我正在使用Rails 3.2.13。

在我posts_controller我有以下代碼:

def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

    def new 
    @post = current_user.posts.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @post } 
    end 
    end 

    def clone 
    @post = current_user.posts.find(params[:id]) # find original object 
    @post = current_user.posts.new(@post.attributes) # initialize duplicate (not saved) 
    render :new # render same view as "new", but with @post attributes already filled in 
    end 

    def create 
    @post = current_user.posts.new(params[:post]) 

    respond_to do |format| 
     if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render json: @post, status: :created, location: @post } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

這是post.rb型號:

class Post < ActiveRecord::Base 
    attr_accessible :content, :title, :videos, :link, :description 
    validates :title, presence: true 
    belongs_to :user 
end 

在Show View我稱之爲:

<%= link_to 'Create a clone', clone_post_path(@post) %> 

我究竟做錯了什麼? 非常感謝您的幫助!

UPDATE: 添加

resources :posts do 
    get 'clone', on: :member 
    end 

到路由文件的工作。

這裏是路線文件:

​​

不幸的是後來發生了新的錯誤:

::加載ActiveModel :: MassAssignmentSecurity中的錯誤PostsController#克隆 不能質量 - 分配受保護的屬性:id,created_at,updated_at,image_file_name,image_content_type,image_file_size,image_updated_at,file,user_id

+0

你能否也請張貼有關郵政控制器的路線?我猜你沒有在你的帖子路徑中添加get:clone,on :: member。 – davidfurber

+0

Thx David!往上看。 – YvonC

+0

@davidfurber你的提示「on:member」工作!往上看。讓我的一天!不幸的是,現在我有一個新的錯誤: ::加載ActiveModel :: MassAssignmentSecurity中的錯誤PostsController#克隆 不能大規模指派保護的屬性:id,created_at,的updated_at,映像文件,image_content_type,IMAGE_FILE_SIZE,image_updated_at,文件,user_id說明 – YvonC

回答

0

確保你的路由文件包含以下內容:

​​

由於克隆動作也不是那麼它知道該怎麼做,你必須在你的路由文件佔了它一個標準動作。

+0

非常感謝你的答案!我添加了你的建議,但錯誤仍然存​​在。我在上面列出了我的路線文件。 – YvonC

+0

我意識到davidfurber在那裏有它,它是在::member而不是:collection。 – sabrams

+0

葉普,工作!再次感謝! – YvonC

相關問題