Мой вопрос: нужен ли нам файл вида для каждого действия в нашем контроллере?Rails: действия и взгляды
(например, если мы определили say_hello действия в контроллере, это необходимо, чтобы добавить say_hello.html.erb в его каталоге просмотра?
Мой вопрос: нужен ли нам файл вида для каждого действия в нашем контроллере?Rails: действия и взгляды
(например, если мы определили say_hello действия в контроллере, это необходимо, чтобы добавить say_hello.html.erb в его каталоге просмотра?
Нет, это не требуется. Например, вы можете сделать или JSON xml с контроллера без необходимости просмотра. Эта статья объясняет это очень хорошо. http://guides.rubyonrails.org/layouts_and_rendering.html
, но для js это обязательно, не так ли? – user3242743
Я так не думаю. Попробуйте с помощью render js: «alert (« Привет Rails »); –
Я отредактирую это, чтобы сказать, что это зависит (с тем же содержимым). Если вы планируете использовать это действие контроллера как 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 или ничего, в зависимости от вашего варианта использования.
Могу ли я сделать JS следующим образом: format.js {render js: @hello}, и если да, то как я могу восстановить его (@hello) в представлении, называемом контроллером? – user3242743
да. render format.js, а затем иметь соответствующий файл с именем render.js.erb, который вы можете сделать с помощью javascript в erb. – creativereason
Нет, вам не требуется просмотр для каждого действия. НО вам нужно представление для каждого действия, которое достигнет конца метода.
Если вы вернетесь в любом месте действия, тогда вы в порядке. Представление требуется только тогда, когда неявный рендер вызывается из-за выполнения, достигающего конца действия.
Нет, это действительно зависит от вас, и это зависит от того, что действие на самом деле сделает. Действия могут оказывать различные виды типов контента: текст, 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
В конце концов, это действительно зависит от того, как работает программа, но если вы оставите ее пустой, она предположит, что есть файл для рендеринга.
Могу ли я сделать JS следующим образом: format.js {render js: @hello}, и если да, то каким образом Я восстанавливаю его (@hello) в представлении, называемом контроллером? – user3242743
Вы используете say_hello для обновления вида? Например, вставьте какой-то текст? – Hesham
yup, но не только обновлять viiew, но и другие вещи. (я использую: remote => true, чтобы сделать вызов ajax) – user3242743
Нет, вам не нужен файл вида для каждого действия – Kirk