Ruby on rails Rails 4-如何在另一个模型上显示一个模型的表单&x27;s观点
我有一个应用程序,我有项目,每个项目都有照片。每个照片都有一个状态,我希望能够在列出其中所有照片的项目显示页面上更新该状态。因此,每张照片都会在staus列中显示一个下拉列表,显示我的不同状态 我能够做到这一点,我在一个单独的页面上更新状态,没有问题,但我需要每一张照片有项目显示页面上显示的形式 这是我的Ruby on rails Rails 4-如何在另一个模型上显示一个模型的表单&x27;s观点,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个应用程序,我有项目,每个项目都有照片。每个照片都有一个状态,我希望能够在列出其中所有照片的项目显示页面上更新该状态。因此,每张照片都会在staus列中显示一个下拉列表,显示我的不同状态 我能够做到这一点,我在一个单独的页面上更新状态,没有问题,但我需要每一张照片有项目显示页面上显示的形式 这是我的照片\u controller.rb class PhotosController < ApplicationController def create @pro
照片\u 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
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
操作中声明@photo
。(目前已被注释掉)。但是当我声明它时,我没有参数,我只有项目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 %>
然后,在调用partial时发送当前照片:
<% 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 %>
悬而未决的
抱歉,此项目当前没有照片
查看渲染
我们正在传递当前照片,这样您的更新将按预期工作。请确保在渲染此部分的任何地方都执行相同的操作。太棒了,效果非常好。出于某种原因,它现在显示为输入,而不是下拉列表。我会努力的。
<% 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 %>