У меня есть модель task
, которая связана с моделями user
и project
.Картина для рендеринга нескольких кофе
Когда я создаю/обновляю задачу, мне нужно сделать обновление в представлении async не только для изменения/добавления задачи, но и для информации о проекте и пользователе (потому что некоторые из этих данных могут также измениться).
У меня есть это в контроллере:
def create
@task = Task.new(params[:task])
@project = Project.find(params[:project_id])
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render json: @task, status: :created, location: @task }
else
format.html { render action: "new" }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
И мои задачи/create.js.coffee
# Update task table
$('#mytable').append("<%= j render(partial: 'tasks/task', locals: { t: @task }) %>")
# Update user data
$('.user-data').html("<%= j render(partial: 'users/user_widget', locals: { u: current_user }) %>")
# Update project data
$('.project-data').html("<%= j render(partial: 'projects/project_widget', locals: { p: @project }) %>")
И он прекрасно работает. Я вижу 2 вопроса:
В каждом рендер
.js.coffee
добавить, я повторяю код слишком много. Я дублирую точно такой же код для обновления данных проекта и пользователя, при обновлении задач, уничтожении задач, и я бы сделал то же самое для новой модели, которая может повлиять на пользователя и проектКажется странным обрабатывать проект и данные пользователя в задачах/create.js.coffee
Таким образом, я ищу лучший образец для обработки этого материала, любых идей?
EDIT (уточнить): Я думаю, что достижение что-то вроде этого было бы лучше:
задачи/create.js.coffee
# Update task table
$('#mytable').append("<%= j render(partial: 'tasks/task', locals: { t: @task }) %>")
UserData.refresh()
ProjectData.refresh()
Однако, я не могу сделать потому что мне нужно каждый раз отображать частицу, поэтому мне нужно было бы сделать что-то странное, как передать часть html тем функциям refresh()
, и это было бы точно так же, как и предыдущий. Это только способ, который пришел мне на ум, но я хотел бы услышать ваши идеи, если они есть.
Мне непонятно, что вы просите. Чего вы пытаетесь избежать? –
Я стараюсь избегать этих двух проблем, которые я описываю на этом посту: Не повторяю код для обновления проекта и пользовательских данных в каждом кофе тех моделей, которые связаны с проектом и пользователем. И не имея ответственности за обновление пользователя и проекта в задаче js. Эти проблемы очень связаны, хотя –
@DaveNewton См. Мое редактирование, это может немного прояснить ситуацию –