原谅我的无知,但我对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
答案 0 :(得分:0)
确保您的路线文件包含以下内容:
resources :posts do
get 'clone', on: :member
end
由于克隆操作不是标准操作,因此您必须在路径文件中对其进行说明,以便它知道该怎么做。