[英]Rails 4 - How to display a form for one model on another model's view
我有一個應用程序,其中有項目,每個項目中都有照片。 每張照片的狀態我都希望能夠在項目的顯示頁面上更新,該頁面列出了其中的所有照片。 因此,每張照片都會在狀態列中顯示一個下拉菜單,並顯示我具有的不同狀態。
我可以在單獨的頁面上更新狀態,這沒問題,但是我需要每張照片都在項目顯示頁面上顯示表單。
這是我的photos_controller.rb
class PhotosController < ApplicationController
def create
@project = Project.find(params[:project_id])
@photo = @project.photos.create(photo_params)
@photo.save
redirect_to @photo.project
end
def edit
@photo = Photo.find(params[:id])
@status_array = []
Status.all.each do |status|
@status_array << status.value
end
end
def update
@photo = Photo.find(params[:id])
@photo.update_attributes(photo_params)
redirect_to @photo.project
end
private
def photo_params
params.require(:photo).permit(:provider, :attachment, :image_id, :size, :data_url, :url, :project_id, :status)
end
end
這是我的projects_controller.rb
class ProjectsController < ApplicationController
before_action :authenticate_user!, only: [:show]
def create
@project = Project.create(project_params)
@project.creator = current_user.email
@project.save
redirect_to @project
end
def index
@projects = Project.all
end
def show
@project = Project.find(params[:id])
@photos = @project.photos
# @photo = Photo.find(params[:id])
end
private
def project_params
params.require(:project).permit(:project_num, :assigned, :project_status, :creator, :photo_id)
end
end
這是我的表格views/photos/_edit.html.erb
<%= simple_form_for @photo do |f| %>
<div class="form-group">
<%= f.input :status, collection: @status_array %>
</div>
<div class="form-group">
<%= f.button :submit, "Submit", class: 'btn btn-success' %>
</div>
<% end %>
他們以這種方式在我的show all photos循環中的views/projects/show.html.erb
中呈現表單。 <%= render 'photos/edit' %>
views/projects/show.html.erb
<%= render 'photos/edit' %>
<% if @project.photos %>
<% @project.photos.each do |photo| %>
<tr>
<td><%= image_tag("#{photo.data_url}") %></td>
<td><%= if photo.provider != "" then photo.provider.titleize else "Uncategorized" end %></td>
<td><%= photo.image_id %></td>
<td><%= photo.size %></td>
<td><a href="<%= photo.url %>">Link to image</a></td>
<td class="status-<%= photo.id %>">
<% if photo.status %>
<%= photo.status %>
<% else %>
Pending
<% end %>
<br>
<%= render 'photos/edit' %>
</td>
</tr>
<% end %>
<% else %>
<p>Sorry, this project has no photos currently</p>
<% end %>
我沒有在項目控制器中聲明@photo
的理解show
動作。 (當前已被注釋掉)。 但是當我聲明它時,我沒有參數,我只在project id
上有參數,所以我無法以這種方式找到照片並用表格正確地對其進行更新。 我在這里有點迷路。 任何想法都將不勝感激。
您尚未定義正確的@photo
變量,一個好的做法是不要在局部變量中使用實例變量,而總是手動將變量傳遞給它,按如下所示更改局部變量:
<%= simple_form_for photo do |f| %>
<div class="form-group">
<%= f.input :status, collection: @status_array %>
</div>
<div class="form-group">
<%= f.button :submit, "Submit", class: 'btn btn-success' %>
</div>
<% end %>
然后在調用部分發送當前照片時:
<% if @project.photos %>
<% @project.photos.each do |photo| %>
<tr>
<td><%= image_tag("#{photo.data_url}") %></td>
<td><%= if photo.provider != "" then photo.provider.titleize else "Uncategorized" end %></td>
<td><%= photo.image_id %></td>
<td><%= photo.size %></td>
<td><a href="<%= photo.url %>">Link to image</a></td>
<td class="status-<%= photo.id %>">
<% if photo.status %>
<%= photo.status %>
<% else %>
Pending
<% end %>
<br>
<%= render 'photos/edit', photo: photo %>
</td>
</tr>
<% end %>
<% else %>
<p>Sorry, this project has no photos currently</p>
<% end %>
查看我們正在傳遞當前照片的render
,這樣您的更新將按預期進行。 確保在渲染此局部圖像的所有地方都執行相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.