我试图复制一条activerecord记录,但收到NoMethodError - 未定义的方法

时间:2013-11-15 16:12:25

标签: ruby-on-rails ruby-on-rails-3 clone duplicate-data

原谅我的无知,但我对RoR很新。我正在开发一个项目,用户可以复制帖子以编辑这个“克隆版本”并保存它(当然还有一个新的帖子ID)。

首先,我尝试使用Amoeba gem描述的here,但我失败了。

然后我认为我找到了更好的解决方案 - Duplicating a record in Rails 3 - 但是当我整合建议的代码时,我收到以下错误:

帖子中的NoMethodError#show #<#:0x0000010267b8c8>

的未定义方法`clone_post_path'

现在研究和修补几个小时,我真的很感激任何帮助!

我正在使用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

在节目视图中,我称之为:

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

我做错了什么? 非常感谢你提前帮忙!

更新: 添加

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

到路径文件工作。

这是路线文件:

 Tt::Application.routes.draw do

   devise_for :users
   get 'about' => 'pages#about'
   resources :posts
   root :to => 'pages#home'
   post 'attachments' => 'images#create'

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

不幸之后发生了新的错误:

ActiveModel :: MassAssignmentSecurity :: PostsController#clone中的错误 无法批量分配受保护的属性:id,created_at,updated_at,image_file_name,image_content_type,image_file_size,image_updated_at,file,user_id

1 个答案:

答案 0 :(得分:0)

确保您的路线文件包含以下内容:

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

由于克隆操作不是标准操作,因此您必须在路径文件中对其进行说明,以便它知道该怎么做。