我有一个Rails 4应用程序,只是安装了Paperclip gem来处理图像上传。在我上传照片之后,我说它不能正常工作。 有人知道出了什么问题?
〜设置/ _form.html.erb
> <%= form_for(@setting, :html => { :multipart => true }) do |f| %>
> <% if @setting.errors.any? %>
> <div id="error_explanation">
> <h2><%= pluralize(@setting.errors.count, "error") %> prohibited this setting from being saved:</h2>
>
> <ul>
> <% @setting.errors.full_messages.each do |msg| %>
> <li><%= msg %></li>
> <% end %>
> </ul>
> </div>
> <% end %>
>
> <div class="field">
> <%= f.label :title %><br>
> <%= f.text_field :title %>
> </div>
> <div class="field">
> <%= f.label :description %><br>
> <%= f.text_area :description %>
> </div>
> <div class="field">
> <%= f.label :paragraph %><br>
> <%= f.text_area :paragraph %>
> </div>
> <div>
> <%= f.file_field :photo %>
> </div>
> <div class="actions">
> <%= f.submit %>
> </div>
> <% end %>
我的设置型号~settings.rb
class Setting < ActiveRecord::Base
attr_accessible :title, :description, :paragraph
has_attached_file :photo
end
照片迁移
class AddAttachmentPhotoToSettings < ActiveRecord::Migration
def self.up
change_table :settings do |t|
t.attachment :photo
end
end
def self.down
drop_attached_file :settings, :photo
end
end
设置迁移
class CreateSettings < ActiveRecord::Migration
def change
create_table :settings do |t|
t.string :title
t.text :description
t.text :paragraph
t.timestamps
end
end
end
〜设置/ Show.html.erb
<p id="notice"><%= notice %></p>
<p> <%= image_tag @setting.photo.url %> </p> <br />
<p>
<strong>Title:</strong>
<%= @setting.title %>
</p>
<p>
<strong>Description:</strong>
<%= @setting.description %>
</p>
<p>
<strong>Paragraph:</strong>
<%= @setting.paragraph %>
</p>
<%= link_to 'Edit', edit_setting_path(@setting) %> |
<%= link_to 'Back', settings_path %>
无法弄清楚出了什么问题。上传的照片没有显示它只是说“失踪”。非常感谢一些帮助! :)
答案 0 :(得分:1)
您可以保留第一个:setting_params
。这似乎是控制器中确保强参数的一种方法(参见:http://guides.rubyonrails.org/getting_started.html#saving-data-in-the-controller)。
要解决此问题,请在此方法中添加如下关系:
private
def setting_params
params.require(:post).permit(:title, :description, :paragraph, :photo)
end
答案 1 :(得分:0)
我很高兴告诉每个人我已经或者将会遇到同样的问题,我只是想出来了!
默认您要生成的控制器,您要添加:photo属性来定义“创建”,如下所示:
def create
@setting = Setting.new(setting_params)
end
只需将其归为:
def create
@setting = Setting.create(params[:setting])
end
(只是要明确;将设置更改为您自己的脚手架名称。)