2016-06-05 6 views
0

Снова у меня возникают проблемы с form_for.Rails, form_for и paperclip

У меня есть модель деятельности, и это выглядит следующим образом:

class Activity < ActiveRecord::Base 
    has_many :acdocs, dependent: :destroy, autosave: true 

    accepts_nested_attributes_for :acdocs, 
           reject_if: proc { |attributes| attributes['descr'].blank?}, 
           allow_destroy: true 
end 

И у меня есть модель acdoc. acdoc сокращен для документа о деятельности. o читал где-то, что если бы я использовал слово «документ», у меня могли бы возникнуть проблемы с JavaScript ... тогда лучше всего безопасно, чем жаль.

Поскольку деятельность может иметь много acdocs, я использую form_for для ручки, что:

<%= f.fields_for :acdocs do |acdocs| %> 
    <div> 
     <%= acdocs.label :descr" %> 
     <%= acdocs.text_field :descr %> 
     <%= acdocs.label :document %> 
     <%= acdocs.file_field :document b%> 
    </div> 
    <% end %> 
    <p> 
    <%= f.submit 'add doc', :name => "add_item" %> 
    </p> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

И для контроллера, я использую это:

def new 
    @activity = Activity.new 
    @activity.acdocs.build 
    end 
    def create 
    @activity = Activity.new(activity_params) 

    if params[:add_item] 
     @activity.acdocs.build 
     render :action => 'new' 
    else 
     respond_to do |format| 
     if @activity.save 
      format.html { redirect_to @activity, notice: 'Activity was successfully created.' } 
      format.json { render action: 'show', status: :created, location: @activity } 
     else 
      format.html { render action: 'new' } 
      format.json { render json: @activity.errors, status: :unprocessable_entity } 
     end 
     end 
    end 
    end 
    def update 
    if params[:add_item] 
     unless params[:activity][:acdocs_attributes].blank? 
     for attribute in params[:activity][:acdocs_attributes].permit! 
      @activity.acdocs.build(attribute.last.except(:_destroy)) unless attribute.last.has_key?(:id) 
     end 
     end 
     @activity.acdocs.build 
     render :action => 'edit' 
    else 
     respond_to do |format| 
     if @activity.update(activity_params) 
      format.html { redirect_to @activity, notice: 'Activity was successfully updated.' } 
      format.json { head :no_content } 
     else 
      format.html { render action: 'edit' } 
      format.json { render json: @activity.errors, status: :unprocessable_entity } 
     end 
     end 
    end 
    end 

Эта установка, своего рода работа , Если i "add_item" связывает поля и выбирает файлы, все они будут загружены.

Проблема для меня - когда пользователь нажимает add_item или даже редактирует сохраненную активность, форма открывается. С помощью itens, кнопки прикрепленного файла и текста: «no file attach». Я уверен, что этот файл предназначен только для того, чтобы сообщить пользователю, что файл загружается с (с его собственного компьютера), а не файл, хранящийся в приложении ... но это заставит пользователя думать, что файл не был загружен.

Как я могу поместить текст, говорящий, что файл есть, когда он есть?

Кроме того, это не первый раз, когда у меня есть аналогичные проблемы с формой. Иногда я хочу показать что-то, если объект уже находится в базе данных. или если он новый. (например, показать «уничтожить флажок» для существующих элементов, но скрыть для новых)

Как я могу это сделать?

ответ

0

Вы можете проверить, существует ли файл. Например, вы можете проверить, если атрибут имя_файла установлен в вашем дб, что-то вроде этого acdoc.document?, или вы можете проверить, если файл на самом деле существует в файловой системе, например: acdoc.document.exists?

  • show_destroy_checkbox if acdoc.document? или
  • show_destroy_checkobx if acdoc.document.exists?

Cheers!

+0

Дело в том, что я внутри формы_for. Итак, у объекта документа, который у меня есть внутри, установите правильный объект. Это помощник form-builder: неопределенный метод 'существует? ' для Techmago

 Смежные вопросы

  • Нет связанных вопросов^_^