我有一个应用程序,我有项目,每个项目都有照片。每张照片的状态都是我希望能够在项目的显示页面上更新,该页面列出了其中的所有照片。因此,每张照片都会在显示的状态列中显示我的不同状态。
我可以在单独的页面上更新状态,没问题,但我需要每张照片都要在项目显示页面上显示表单。
这是我的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 %>
他们在我的节目中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
上的参数,所以我找不到这样的照片并用表格正确更新。我在这里有点迷失。非常感谢任何想法。
答案 0 :(得分:2)
你没有定义正确的@photo
变量,一个好的做法是不在partials中使用实例变量,并且总是手动将变量传递给它,更改你的部分如下:
<%= 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
,这样您的更新将按预期工作。确保在渲染此部分的任何地方都这样做。