我正在开发Rails 4.2.6应用程序。我需要将一个表参数从控制器传送到模型。这样做我收到此错误undefined local variable or method 'params'
我正在尝试将下一行代码html += params[:table_data].gsub('<span class="glyphicon glyphicon-ok text-success"></span>', '✔') if params[:table_data].present?
转移到此代码行中的模型中:
if !element.nil?
html += "<td class=\"soa-element text-center\" form_id=\"#{form.id}\" visit_id=\"#{visit.id}\" id=\"#{element.id}\">"
html += params[:table_data].gsub('<span class="glyphicon glyphicon-ok text-success"></span>', '✔') if params[:table_data].present?
html += "</td>"
else
html += "<td class=\"soa-element\" form_id=\"#{form.id}\" visit_id=\"#{visit.id}\" id=\"0\"></td>"
end
上面我收到了错误,但我无法弄清楚我做错了。
下一个Pastebin是与此问题相关的模型和控制器:
如果我保持原来我的应用程序仍在工作,但我不能在控制器内部有表元素,我需要将其传递给模型。我需要了解我在做什么。
答案 0 :(得分:0)
您不会将控制器中的参数传递给视图。请改用实例变量。如果在控制器中声明变量params,它将在您的视图中可用。
您需要先清除MVC概念。
答案 1 :(得分:0)
上面的答案正确地告诉你,你可能不希望这样做,但是如果你真的想这样做,那你要做的就是制作@params = the_params
或以同样的方式设置一个带有@
符号的变量,该变量将在您的视图中可用。
答案 2 :(得分:0)
不确定这是否有用。将变量从Controller传输到您应该使用的视图@varaible ...
如果要转移到模型,则必须在Model.rb文件中的函数内完成。
答案 3 :(得分:0)
在您的模型中,您已经有一个接收参数的方法示例,例如:
def update_state(params)
self.update(params)
self.reload
self.next_state_version
self.save
end
以及如何从控制器调用此类方法的示例:
def update_status
find_token
if @token.nil?
flash[:error] = "The changes were not saved as the edit lock has timed out."
else
@study_version.update_state(the_params)
AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version updated")
@token.release
end
redirect_to history_study_path(@study)
end
所以,在你的模型中,做:
def soa(params)
...
end
在你的控制器中:
def soa
@study_version = StudyVersion.find(params[:id])
render text: @study_version.soa(the_params).html_safe
end
话虽如此,我还要补充说,很多这样的逻辑和代码应该被IMO转移到服务对象和演示者中。你的控制器中有太多(再次,IMO),并将其推入你的模型并没有那么好。你只是把你的垃圾塞进另一个抽屉里。