gpt4 book ai didi

ruby-on-rails - Rails 4 添加 file_field 以将附件上传到现有表单和 Controller

转载 作者:数据小太阳 更新时间:2023-10-29 07:14:23 24 4
gpt4 key购买 nike

我是 Rails 的 super 新手。已经学习了几个星期了。请原谅我的白痴。我无法获取我选择上传的文件。

我正在使用 Rails 4.0.0。

我正在开发我的第一个应用程序,我首先遵循博客应用程序的 Rails 指南。我接受了它并运行它并正在创建一些不同的东西(错误跟踪系统)只是试图学习绳索。

所以,我有我的表格:

<%= form_for @post do |f| %>

并且我已经在我的 file_field 中添加了。就选择文件而言, View 中的显示部分看起来和工作良好。

<%= f.label :attachment %>
<%= f.file_field :attachment %>

我已经从 rails 4 guides FYI 中提取了这个。所以我的 Controller 看起来像这样:

class PostsController < ApplicationController

def new
@post = Post.new
end

def create
@post = Post.new(params[:post].permit(:title, :text, :user, :screen))

if @post.save
redirect_to posts_path
else
render 'new'
end
end

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

def index
@posts = Post.all
end

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

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

if @post.update(params[:post].permit(:title, :text, :user, :screen))
redirect_to posts_path
else
render 'edit'
end
end

def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to posts_path
end

def upload
uploaded_io = params[:post][:attachment]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
file.write(uploaded_io.read)
end
end

private
def post_params
params.require(:post).permit(:title, :text, :user, :screen, :attachment)
end

end

这里的新作品正在上传。其他一切都可以很好地从数据库中写入/读取和显示。当显示 View 时,我输入文本,附加一个文件并点击提交。一切都写入数据库并显示在索引中,但我尝试附加的文件没有写入 ~/bugs/public/uploads/

在此先感谢您的帮助。

最佳答案

我认为问题可能在于 :attachment 属性不是“创建”或“更新”操作中允许的参数。

编辑:我上传简单​​文件的方式是使用 Paperclip gem - 这个 railscast解释得很好。它真的很容易使用。

还有 this answer这可能会回答这个问题。

此外,使用强参数的标准方法是在私有(private)方法中定义允许的参数并在 Controller 操作中调用该方法(这样您就不必自己重复)。这可能是错误的原因。

例子:

def create
@post = Post.new(post_params)
...
end

希望对您有所帮助。

关于ruby-on-rails - Rails 4 添加 file_field 以将附件上传到现有表单和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com