2

Мой вопрос: нужен ли нам файл вида для каждого действия в нашем контроллере?Rails: действия и взгляды

(например, если мы определили say_hello действия в контроллере, это необходимо, чтобы добавить say_hello.html.erb в его каталоге просмотра?

+0

Нет, вам не нужен файл вида для каждого действия – Kirk

ответ

0

Нет, это не требуется. Например, вы можете сделать или JSON xml с контроллера без необходимости просмотра. Эта статья объясняет это очень хорошо. http://guides.rubyonrails.org/layouts_and_rendering.html

+0

, но для js это обязательно, не так ли? – user3242743

+0

Я так не думаю. Попробуйте с помощью render js: «alert (« Привет Rails »); –

3

Я отредактирую это, чтобы сказать, что это зависит (с тем же содержимым). Если вы планируете использовать это действие контроллера как JS или JSON вам не нужен файл вида. Если вы хотите, чтобы он делился несколькими представлениями, файл может содержать разделяемый фрагмент (который может использоваться в других представлениях). Эти примеры показывают, что подсистемы генераторов создают такие примеры. Они полезны, если вы изучаете рельсы. В противном случае это не так.

Если вы должны были разделить частичное, вы могли бы частично с именем _form.html.erb, а затем внутри say_hello.html.erb файла, было бы просто позвонить:

<%= render 'form' %>

Если вы хочет сделать JSON или JS файлы, которые вы можете respond_to в своем действии:

respond_to do |format| 
     format.html # say_hello.html.erb 
     format.json { render json: @hello } #no file needed 
     format.js { render js: @hello } 
     #format.js   {} #do nothing... or use a little javascript in there... 
     # or have a file named say_hello.js.erb and use your @hello variable 
    end 

Edit: последнего обновления. Ваш say_hello.js.erb файл может сделать что-нибудь на другой точке зрения (при вызове удаленно): say_hello.js.erb

<% if @hello.attribute == "some value" %> 
    $('#div_in_another_view').show(); 
<% else %> 
    $('#div_in_somewhere_else').hide(); 
<% end %> 

Вы можете сделать JQuery и все, что вы хотите, чтобы мнение, назвав его (как пока он использует AJAX). End Редактировать Guides are great Место для начала работы. Railscasts.com (даже если Ryan больше не обновляется).

Edit: Отличный пример на различные варианты на respond_to на this rails guide относительно JavaScript

Вы можете просто передать Javascript прямо из этого format.js вызова, или использовать файл, если вам нужны более сложные вещи. Вам также не нужно ничего делать. Вы могли бы просто вернуть его xml или ничего, в зависимости от вашего варианта использования.

+0

Могу ли я сделать JS следующим образом: format.js {render js: @hello}, и если да, то как я могу восстановить его (@hello) в представлении, называемом контроллером? – user3242743

+0

да. render format.js, а затем иметь соответствующий файл с именем render.js.erb, который вы можете сделать с помощью javascript в erb. – creativereason

0

Нет, вам не требуется просмотр для каждого действия. НО вам нужно представление для каждого действия, которое достигнет конца метода.

Если вы вернетесь в любом месте действия, тогда вы в порядке. Представление требуется только тогда, когда неявный рендер вызывается из-за выполнения, достигающего конца действия.

0

Нет, это действительно зависит от вас, и это зависит от того, что действие на самом деле сделает. Действия могут оказывать различные виды типов контента: текст, JSON, HTML, XML и т.д. ... Вот пример:

def show 
    render xml: @something 
end 

Это действие не имеет вида, но он будет выводить XML при вызове.Он также может оказывать различные вещи на основе формата вызова:

def show 
    respond_to do |format| 
    format.html do 
    redirect_to '/' 
    end 
    format.json do 
    render xml: @something 
    end 
    end 
end 

действие также может переадресовать (опять же, это один не файл):

def show 
    redirect_to '/' 
end 

В конце концов, это действительно зависит от того, как работает программа, но если вы оставите ее пустой, она предположит, что есть файл для рендеринга.

+0

Могу ли я сделать JS следующим образом: format.js {render js: @hello}, и если да, то каким образом Я восстанавливаю его (@hello) в представлении, называемом контроллером? – user3242743

+0

Вы используете say_hello для обновления вида? Например, вставьте какой-то текст? – Hesham

+0

yup, но не только обновлять viiew, но и другие вещи. (я использую: remote => true, чтобы сделать вызов ajax) – user3242743

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