cha*_*gee 2 ruby-on-rails nested-forms railscasts carrierwave
我正在使用Carrierwave将图像字段添加到基于Ryan Bates修订的#196截屏视频的Rails嵌套模型中.Carrierwave位基于他的截屏视频#253
问答模型嵌套在类别模型中.
我可以将图像上传并显示在"显示"页面上.但是当我返回编辑视图时,没有图像,我仍然看到"选择文件"按钮旁边的"未选择文件"文本.我可以前往Show页面来回播放它仍然出现在Show中,但从不出现在Edit中.我的用户会认为他们每次都要上传新图片!
我的Show视图中有这行代码:
<%= image_tag question.image_url(:thumb).to_s if question.image? %>
Run Code Online (Sandbox Code Playgroud)
但如果我尝试将其放入_form视图,那么我会得到一个未知的局部变量或方法错误.
我已经尝试了几个if语句,但还没有让它工作.我试图把它全部放在编辑视图中,但无济于事.
我的_form视图:
<%= form_for @category, :html => {:multipart => true} do |f| %>
<% if @category.errors.any? %>
<div class="error_messages">
<h2><%= pluralize(@category.errors.count, "error") %> prohibited this category from being saved:</h2>
<ul>
<% @category.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div id="categorytitle" class="field">
<%= f.label :name, "Category Name" %><br />
<%= f.text_field :name %>
</div>
<%= f.fields_for :questions do |builder| %>
<%= render 'question_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add Question", f, :questions %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我的_questions部分
<fieldset id="questionarea">
<%= f.label :content, "Question" %>
<%= f.text_field :content%>
<hr>
<div class="field">
<p>
<%= f.check_box :active, class: "pull-left" %>
<%= f.label :active %>
<span class="help-block">Turning questions on and off helps you customize the category.</span>
</p>
</div>
<hr>
<div class="field clearthat">
<%= f.label :image, "Add an Image"%>
<span class="help-block">Images will help non-readers understand the question.</span>
<%= f.file_field :image %>
<%= f.hidden_field :image_cache %>
</div>
<hr>
<!-- <%= link_to "remove", '#', class: "remove_fields" %> -->
<p class="clearthat"> </p>
<%= f.fields_for :answers do |builder| %>
<%= render 'answer_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add Answer", f, :answers %>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
有一个_answer部分,但似乎没有形成它.
这是我尝试将图像直接放入我的_question部分时得到的错误消息(从上面_question代码的中心剪切):
<div class="field clearthat">
<%= f.label :image, "Add an Image"%>
<span class="help-block">Images will help non-readers understand the question.</span>
<%= image_tag question.image_url(:thumb).to_s if question.image? %>
<%= f.file_field :image %>
<%= f.hidden_field :image_cache %>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
NameError in Categories#edit
undefined local variable or method `question'
Run Code Online (Sandbox Code Playgroud)
我的分类型号:
class Category < ActiveRecord::Base
attr_accessible :name, :questions_attributes
has_many :questions
accepts_nested_attributes_for :questions, allow_destroy: true
end
Run Code Online (Sandbox Code Playgroud)
我的问题模型:
class Question < ActiveRecord::Base
attr_accessible :content, :category_id, :answers_attributes, :active, :image, :image_cache
belongs_to :category
has_many :answers
accepts_nested_attributes_for :answers, allow_destroy: true
mount_uploader :image, ImageUploader
end
Run Code Online (Sandbox Code Playgroud)
我的类别控制器:
class CategoriesController < ApplicationController
before_filter :signed_in_user, only: [:index, :edit, :update, :destroy]
before_filter :correct_user, only: [:edit, :update]
before_filter :admin_user, only: :destroy
def index
@categories = Category.all
end
def show
@category = Category.find(params[:id])
end
def new
@category = Category.new
end
def create
@category = Category.new(params[:category])
if @category.save
redirect_to @category, :notice => "Successfully created category."
else
render :action => 'new'
end
end
def edit
@category = Category.find(params[:id])
end
def update
@category = Category.find(params[:id])
if @category.update_attributes(params[:category])
redirect_to @category, :notice => "Successfully updated category."
else
render :action => 'edit'
end
end
def destroy
@category = Category.find(params[:id])
@category.destroy
redirect_to categories_url, :notice => "Successfully destroyed category."
end
private
def signed_in_user
unless signed_in?
store_location
redirect_to signin_path, notice: "Please sign in."
end
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
def admin_user
redirect_to(root_path) unless current_user.admin?
end
Run Code Online (Sandbox Code Playgroud)
结束
感谢任何能提供帮助的人.
也许我的问题没有得到很好的解答,因为我没有得到任何帮助.但我终于明白了!
这是导致问题的代码行:
<%= image_tag question.image_url(:thumb).to_s if question.image? %>
Run Code Online (Sandbox Code Playgroud)
这是有效的代码行:
<%= image_tag f.object.image_url(:thumb) %>
Run Code Online (Sandbox Code Playgroud)
我并不完全清楚,但似乎我在我的问题部分,并调用一个称为问题的方法,rails并不知道我的意思.
我在这个stackoverflow QA中找到了答案:Rails嵌套表单与图像
现在我有一个工作if语句,所以我的用户可以更改图像:
<% if f.object.image? %>
<%= image_tag f.object.image_url(:thumb) %>
<%= f.file_field :image %>
<% else %>
<%= f.file_field :image %>
<%= f.hidden_field :image_cache %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
接下来,我必须弄清楚如何更改file_field按钮上的值.
| 归档时间: |
|
| 查看次数: |
2060 次 |
| 最近记录: |