我是rails的新手,并创建了一个存储公寓信息的房地产应用程序。
我有一个公寓模型,视图和控制器,所以我可以CRUD公寓。
现在,我想添加将多张图片添加到公寓的功能。
我已经安装了gem carrierwave,mini_magick和fog gems。
我创建了一个Image模型,其中包含picture(string)列和apartment_id(整数)列。然后我在Image和Apartment之间创建了belongs_to / has_many关系。
我的问题是:如何在“创建公寓”视图中创建图像模型的实例?
我假设我在公寓控制器中做了类似的事情,但我不确定:
def new
@apartment = Apartment.new
end
def create
@apartment = current_user.apartments.new(apartment_params)
**@image = @apartment.images.new(?)**
if @apartment.save **&& @image.save**
flash[:notice] = "Congratulations! Your apartment has been added."
redirect_to apartments_path
else
flash[:error] = "There was an error saving your listing. Please try again."
render :new
end
end
private
def apartment_params
params.require(:apartment).permit(:street, :from_date, :to_date, :to_date_open, :flex_dates, :price, :price_neg, :agent_fee, :furnished, :package, :flights, :beds, :baths, :description)
end
另外,我不确定如何更改视图中的代码:
<%= form_for(@apartment) do |f| %>
<% if @apartment.errors.any? %>
<div id="error_explanation">
<ul>
<% @apartment.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :street %><br>
<%= f.text_field :street %>
</div>
**<div class="field">
<%= f.label :picture %>
<%= f.file_field :picture %>
<%#= f.hidden_field :picture_cache %>
</div>**
有关如何在创建新公寓时添加图像的任何指导都会很棒。
提前致谢!!
答案 0 :(得分:0)
我过去如何处理这个问题是两个还有另外两个模型。我会创建一个画廊,一个是照片。
照片上可以提供有关您关注名称或描述的更多信息。照片链接到图库,因此它知道它属于哪个图库。
画廊然后只有一个名字和公寓的链接。我喜欢把它分开来,以防你想要做任何特别的事情,比如挑选哪张照片是画廊中的第一张什么的。
如果你不在乎那么你可以很容易地用照片做另一个crud模型并将它给它为apartment_id。
我会稍后处理照片上传,而不是在公寓上市时,它会帮助人们在上市公寓的障碍较低时获得更多投资。
因此,如果您使用图库进行操作,我将运行的命令是
rails g scaffold gallery name:string apartment:belongs_to
rails g scaffold photo name:string information:text photo_url:string gallery:belongs_to
或没有图库
rails g scaffold photo name:string information:text photo_url:string apartment:belongs_to
尽管如此,您必须更新照片模型和控制器才能使用carrierwave。