Ответ 1
Не должно ли оно находиться в файле _show.js.erb
?
Использование rails3 - У меня есть проект со многими задачами. Я хочу использовать javascript для создания пользовательского интерфейса для каждой задачи. Я решил, что смогу отобразить эти задачи на странице проектов, создав частичный JavaScript для каждого. Я не могу получить "задачи/показ", чтобы увидеть задачи /show.js.erb. Любые идеи?
В проектах /show.html.erb
<div id="tasks">
<%= render(:partial => "tasks/show", :collection => @project.tasks) %>
</div>
Задачи/show.js.erb
$("tasks").append(new TaskWidget(task.id))
Я получаю ошибки
ActionView::MissingTemplate in Projects#show
Missing partial tasks/show with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths .... around line #13
Спасибо
Не должно ли оно находиться в файле _show.js.erb
?
Вы можете попробовать это. Вместо частичного Javacript вы можете создать html один _show_js.html.erb
и окружить свой JS-код тегом html <script>
.
<script type='text/javascript'>
$("tasks").append(new TaskWidget(task.id))
</script>
и
<div id="tasks">
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %>
</div>
Try:
render: partial = > "tasks/show.js"
Чтобы сделать это, мне нужно было добавить формат:
<script>
<%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
</script>
Ну, я не знаю, является ли такая же проблема, но я прошел аналогичную вещь с рельсами 3. У меня было, например, частичное представление в app/views/invoices/_select.html.erb
, и я смог отобразить в представлении с помощью
<% = render: partial = > "invoices/select" % >
с какой-либо проблемой, и если в контроллере я помещаю
render: partial = > "invoices/select"
Мне удалось открыть действие в браузере, проблема возникает, когда я пытаюсь вызвать действие из вызова ajax, после чего получаю ошибку ActionView::MissingTemplate
. Единственный способ, который я решил решить, - переименовать представление в _select.rhtml
, и тогда все прекрасно работает.
Проблема в том, что в Rails 3 рендер из файла .js будет искать файлы только в виде show.js.erb или show.erb
Чтобы обойти это, вам нужно будет либо создать файл _show.js.erb, но так как этот вид побеждает цель частичных, вы можете просто просто переименовать файл show.html.erb в show.erb
Это, вероятно, неверная практика, чтобы сделать стандартное действие контроллера без окончания типа (например, show.erb)
Что бы я сделал, если бы я был вами, переименуйте свое частичное что-то вроде _tasks.erb вместо _show.html.erb, а затем, если вам нужны задачи /show.html.erb, вы можете просто отредактировать части _tasks внутри это представление.