ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Wir gehen davon aus, dass die Buchungsfunktion bereits erstellt wurde.
1 Einführung von Gem Refile Fügen Sie 2 Spalten hinzu 3 Modell bearbeiten 4 Controller bearbeiten 5 Ansicht bearbeiten
Gemfile
gem 'refile', require: 'refile/rails', github: 'refile/refile'
Terminal
$ bundle install
Terminal
$ rails g migration AddPostImageIdToPosts post_image_id:string
Terminal
$ rails db:migrate
Es ist in Ordnung, wenn t.string "post_image_id" hinzugefügt wird.
db/schema
create_table "posts", force: :cascade do |t|
t.integer "user_id"
t.string "title"
t.string "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "post_image_id" # <--OK damit
t.index ["user_id"], name: "index_posts_on_user_id"
end
app/models/post.rb
attachment :post_image
Sie können das post_image auch ändern, indem Sie Folgendes hinzufügen.
app/controllers/posts_controller.rb
def post_params
params.require(:post).permit(:title, :body, :post_image)
end
Dieses Mal, um zuerst das Standardbild anzuzeigen, Ich habe im Voraus eine Bilddatei namens no-image.png vorbereitet. Der Speicherort befindet sich in App / Assets / Images.
erb:app/views/posts/new.html.erb
<% form_with,...%>
...
<div>
<%= attachment_image_tag @post, :post_image, fallback: "no-image.png ", id: "img_prev", style: "height: 250px; width:300px;" %><br>
<%= f.attachment_field :post_image %>
</div>
...
<% end %>
...
<script>
$(document).on("turbolinks:load", function(){
function readURL(input) {
if(input.files && input.files[0]){
var reader = new FileReader();
reader.onload = function (e) {
$('#img_prev').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$("#post_post_image").change(function(){
readURL(this);
});
});
</script>
Refile.secret_key = ...
Wird angezeigt.
Kopieren Sie die Zeile mit Refile.secret_key = und
In config / initializers / application_controller_renderer.rb
Sie können den Fehler beseitigen, indem Sie ihn unten hinzufügen.
</details>
Recommended Posts